我期望皮肤类没有被初始化

时间:2011-11-03 19:16:00

标签: flex skin

假设我有一大堆代码:

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();行中初始化皮肤。为什么不是这样?有没有办法可以强制皮肤初始化?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:在将对象添加到舞台之前,不会创建外观。这意味着你要么必须这样做:

选项1

var myPopup:MyPopup = new MyPopup();    
PopUpManager.addPopUp(myPopup,this);  
myPopup.mainModel = model;  

选项2

var myPopup:MyPopup = new MyPopup();  
myPopup.mainModel = model;   
PopUpManager.addPopUp(myPopup,this);  

但是将所有对皮肤中创建的对象的引用从mainModel的setter移动到由creationComplete触发的方法中。