假设我有一大堆代码:
var myPopup:MyPopup = new MyPopup();
myPopup.mainModel = model;
PopUpManager.addPopUp(myPopup,this);
MyPopup
的开头是这样的:
<views:BlaBla
...
skinClass="com.mySkinClass"
...
>
<fx:Script>
<![CDATA[
[SkinPart] public var aButton:Button;
public function set mainModel(mainModel:Something):void {
...
aButton.addEventListener(...);
...
}
mainModel setter引用在外观中初始化的aButton变量。奇怪的是,在之后之后,皮肤才会被初始化。这会导致空指针异常。我希望在var myPopup:MyPopup = new MyPopup();
行中初始化皮肤。为什么不是这样?有没有办法可以强制皮肤初始化?
答案 0 :(得分:1)
回答我自己的问题:在将对象添加到舞台之前,不会创建外观。这意味着你要么必须这样做:
var myPopup:MyPopup = new MyPopup();
PopUpManager.addPopUp(myPopup,this);
myPopup.mainModel = model;
或
var myPopup:MyPopup = new MyPopup();
myPopup.mainModel = model;
PopUpManager.addPopUp(myPopup,this);
但是将所有对皮肤中创建的对象的引用从mainModel的setter移动到由creationComplete
触发的方法中。