Я пытаюсь компонентизировать один из компонентов пользовательского интерфейса в приложении AIR, которое я разрабатываю во Flex. В этом примере я хочу отобразить информацию о файле в одной строке (которая имеет значок, текст / ссылку и размер).
Мой код выглядит следующим образом (компонент называется 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 имеют нулевое значение (или, по крайней мере, они отображаются таким образом в отладчике).
Кто-нибудь знает, есть ли способ обойти это? Я должен ждать событий, указывающих, что дочерние компоненты были созданы? Есть ли более распространенный шаблон, который решает эту проблему?
На данный момент я могу вручную все делать в ActionScript в своем основном приложении (создать Canvas и добавить к нему дочерние элементы), но я был бы признателен за понимание того, как более четко разделить код.