我試圖在Flex中開發的AIR應用程序中組件化UI的一個組件。在這個例子中,我想在一行(它有一個圖標,一些文本/鏈接和大小)上顯示文件信息。使用動作腳本中的複合MXML組件
我的代碼看起來像這樣(組件被稱爲FileDisplay):
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
public function set iconType(source:String):void {
this.ficon.source = source;
}
public function set fileName(name:String):void {
this.fname.htmlText = name;
}
public function set fileSize(size:String):void {
this.fsize.text = size;
}
]]>
</mx:Script>
<mx:Image id="ficon" />
<mx:Label id="fname" left="20" right="30" text="Filename" />
<mx:Label id="fsize" right="0" text="0 K" />
</mx:Canvas>
當我在我的主要應用程序中使用該組件時,動作的樣子:
for each (var file:XML in result.files) {
var fd:FileDisplay = new FileDisplay();
fd.fileName = '<a href="blah">'+file.name+'</a>';
fd.iconType = getFileTypeIcon(file.name);
fd.fileSize = getFileSizeString(file.size);
this.file_list.addChild(fd);
}
然而,當我這樣做,我得到一個錯誤:錯誤#1009:無法訪問空對象引用的屬性或方法。這是因爲FileDisplay的子組件是null(或者至少它們在調試器中以這種方式顯示)。
有誰知道是否有辦法解決這個問題?我是否應該等待事件顯示子組件已創建?有沒有更常見的模式可以解決這個問題?
現在我可以做手工在ActionScript一切都在我的主要應用程序(創建一個畫布,並添加孩子吧),但我想知道關於如何將代碼更乾淨分開任何見解。
感謝您的見解。有關如何使用「高級」自定義組件的文檔相當混亂。我感覺我的情況並不罕見,他們應該可能有更多像這樣的例子。 – 2009-09-01 14:12:34