簡體   English   中英

擴展Flex FileReference類以包含另一個屬性

[英]Extending Flex FileReference class to contain another property

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

我從中得到活動的handle屬性,所有其他(即繼承的)屬性都拋出Error #2037


因此,也許我想做的是要求覆蓋FileReferenceList 如果必須將原始對象實例SxmFR ,這就是我要做的,因為我正在使用FRL允許用戶一次選擇多個文件。 你們確定沒有辦法從FileReference到我的課程嗎?

您可以完全通過事件偵聽器傳遞對象,這只是通過特定的方式完成的。 我將學習正確地做它,而不是嘗試擴展一個核心庫,如果您犯了一個小錯誤,這會在以后給您帶來麻煩。

我的解決方案:不要擴展FileReference,而是擴展Event並向其中添加屬性。

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

然后在您的處理程序中,您只需編寫:

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

走這條路更輕松! 額外的好處是,如果任何其他Flash Developer隨時隨地查看您的代碼,它們都不會被非標准的自定義FileReference所吸引。 :)

擴展FileReferenceList不會有幫助。 當用戶選擇多個文件時, FileReferenceList.browse()方法創建一個FileReference對象的數組-這是內部發生的(可能在其私有方法中),並且您無法更改該行為並強制其創建SxmFR對象。 使用Myk建議的自定義事件。


本文討論了聲音對象,但也可能適用於FileReference對象。 可能是您無法重用它們。 將代碼發布到您使用SmxFr類的位置,並得到所述錯誤。

當e.target實例化為FileReference時,您不能將其強制轉換為SmxFR,因為它不在繼承行中。 以另一種方式,您可以將SmxFR對象轉換為FileRefernce。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM