Я новичок в flex и actioncript.Я пытаюсь создать небольшое гибкое приложение с несколькими состояниями, но если у меня есть вложенные контейнеры, похоже, что некоторые объекты не инициализируются, когда я ожидал, что они будут, даже когда для creationPolicy установлено значение "all". "
Я уменьшил проблему до небольшого примера с закомментированным блоком, показывающим, когда работает .
Используя существующий код, я получаю эту ошибку: «TypeError: Ошибка # 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект в main / init ()», и обработчики событий не установлены.
Если я вместо этого использую закомментированный блок, которыйУдалены элементы Panel и VBox, работает .
Я знаю, что могу добавить атрибут click к элементам mxml, но это всего лишь упрощенный пример, и меня больше интересуетзная, почему объекты не инициализируются при загрузке приложения.
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
applicationComplete="init();"
currentState="start">
<mx:Script>
private function mainButtonHandler(event:Event):void{
currentState = "start"
}
private function startButtonHandler(event:Event):void {
currentState = "main";
}
public function init():void{
mainButton.addEventListener(MouseEvent.CLICK, mainButtonHandler);
startButton.addEventListener(MouseEvent.CLICK, startButtonHandler);
}
</mx:Script>
<!-- this does not work -->
<mx:states>
<mx:State name="main">
<mx:AddChild creationPolicy="all">
<mx:Panel creationPolicy="all">
<mx:VBox creationPolicy="all">
<mx:Button id="mainButton" label="Change to Start State"/>
</mx:VBox>
</mx:Panel>
</mx:AddChild>
</mx:State>
<mx:State name="start">
<mx:AddChild creationPolicy="all">
<mx:Panel creationPolicy="all">
<mx:VBox creationPolicy="all">
<mx:Button id="startButton" label="Change to Main state"/>
</mx:VBox>
</mx:Panel>
</mx:AddChild>
</mx:State>
</mx:states>
<!-- this works -->
<!--
<mx:states>
<mx:State name="main">
<mx:AddChild creationPolicy="all">
<mx:Button id="mainButton" label="Change to Start State"/>
</mx:AddChild>
</mx:State>
<mx:State name="start">
<mx:AddChild creationPolicy="all">
<mx:Button id="startButton" label="Change to Main state"/>
</mx:AddChild>
</mx:State>
</mx:states>
-->
</mx:Application>
Спасибо за любые отзывы.