代码之家  ›  专栏  ›  技术社区  ›  jeffcook2150

扩展Flex FileReference类以包含另一个属性

  •  0
  • jeffcook2150  · 技术社区  · 15 年前

    我想扩展Flex的FileReference类以包含一个自定义属性。我之所以要这样做是因为AS3不允许我通过事件侦听器将参数传递给函数,这让我感到难过,所以我需要这个属性存在于事件目标上,这样我就可以访问它。

    我还希望能够将现有的FileReference对象无需任何麻烦地强制转换到这个类。我有:

    var fr:SmxFR = e.target as SmxFR
    

    我想让它工作;现在它只返回null。

    新实例化的空白 SmxFR 对象具有适当的扩展属性,但其所有继承属性和对象都返回 Error: Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.

    这是我正在使用的类, SmxFR.as :

    package
    {
    import flash.net.FileReference;
    
    public class SmxFR extends FileReference
    {
        public var housenum:String = "";
        public function SmxFR()
        {
            super();
        }       
    }
    }
    

    尽量直截了当,真的。有人能帮我弄清楚吗?谢谢。


    编辑:

    var fr:SmxFR = new SmxFR();
    

    我从中获得living handle属性,所有其他(即继承的)属性抛出 Error #2037 .


    FileReferenceList ? 如果必须将原始对象实例化为 SxmFR ,这就是我要做的,因为我使用FRL允许用户一次选择多个文件。你们确定没有办法从一个地方禁食吗 FileReference 去我的班?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Myk    15 年前

    你完全可以通过事件监听器传递对象,这只是用一种特定的方式。我要学会正确地去做,而不是试图扩展一个核心库,如果你犯了一个小错误,它可能会在以后给你带来问题。

    var myEvent:MyExtendedEvent = new MyExtendedEvent();
    myEvent.myCustomProperty = myValue;
    dispatchEvent(myEvent);
    

    然后在处理程序中,您只需编写:

    function myEventHandler(e:MyExtendedEvent):void {
         trace(e.myCustomProperty);
    }
    

    沿着这条路走下去更不痛苦!另外一个好处是,如果任何地方的其他Flash开发人员查看过您的代码,他们就不会因为非标准的定制文件引用而受到攻击。:)

        2
  •  0
  •   jochil    15 年前

    当e.target被实例化为FileReference时,不能将其强制转换为SmxFR,因为它不在继承行中。另一方面,可以将SmxFR对象添加到filereference。

        3
  •  0
  •   Amarghosh    15 年前

    延伸 FileReferenceList 不会有帮助的。 FileReferenceList.browse() FileReference 当用户选择多个文件时-这在内部发生(可能在其私有方法中),并且您不能更改该行为并强制它创建SxmFR对象。按照Myk的建议使用自定义事件。


    This article 谈论声音对象,但可能适用于 文件引用 SmxFr 类并获得所述错误。

    推荐文章