[英]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.