0

我想扩展 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();

我从中获得了活的句柄属性,而所有其他(即继承的)属性 throw Error #2037


那么,也许我想要做的是需要覆盖FileReferenceList?如果必须将原始对象实例化为SxmFR,这就是我必须做的,因为我使用 FRL 来允许用户一次选择多个文件。你们确定没有办法快速从aFileReference到我的班级吗?

4

3 回答 3

2

您完全可以通过事件侦听器传递对象,只是以特定方式完成。我会学会正确地做到这一点,而不是尝试扩展核心库,如果你犯了一个小错误,以后可能会给你带来麻烦。

我的解决方案:不要扩展 FileReference,而是扩展 Event 并将您的属性添加到其中。

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

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

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

走这条路更轻松!额外的好处是,如果任何其他地方的 Flash 开发人员查看您的代码,他们将不会因为非标准的自定义 FileReference 而受到打击。:)

于 2009-11-12T22:20:12.940 回答
0

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


本文讨论 Sound 对象,但也可能适用于FileReference对象。可能你不能重复使用它们。将代码发布到您使用SmxFr该类的位置并得到上述错误。

于 2009-11-12T16:50:28.173 回答
0

当 e.target 实例化为 FileReference 时,您不能将其转换为 SmxFR,因为它不在继承行中。在另一种方式中,您可以将 SmxFR 对象转换为 FileReference。

于 2009-11-12T17:02:15.987 回答