Класс скина не инициализируется, когда я ожидаю - PullRequest
0 голосов
/ 03 ноября 2011

Предположим, у меня есть фрагмент кода, подобный следующему:

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 ссылается на переменную aButton, котораяинициализируется в коже.Как ни странно, скин не инициализируется до тех пор, пока после не запустится сеттер.Это вызывает исключение нулевого указателя.Я ожидаю, что скин будет инициализирован в строке var myPopup:MyPopup = new MyPopup();.Почему это не так?Есть ли способ заставить инициализировать скин?

1 Ответ

1 голос
/ 03 ноября 2011

Чтобы ответить на мой собственный вопрос: скин не создается до тех пор, пока Объект не будет добавлен на сцену. Это означает, что вы должны сделать это:

Вариант 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 и в метод, вызванный creationComplete.

...