#actionscript-3 #flash-builder
#actionscript-3 #flash-builder
Вопрос:
<fx:Script>
<![CDATA[
protected function button1_clickHandler(event:MouseEvent):void
{
if (cbAlwaysOnTop.selected) { // <<<<<< I get the error #1009 here
} else {
}
}
]]>
</fx:Script>
<mx:TabNavigator x="0" y="0" width="100%" height="100%">
<s:NavigatorContent label="Translate" width="100%" height="100%">
<s:Button label="test" click="button1_clickHandler(event)"/>
</s:NavigatorContent>
<s:NavigatorContent label="Settings" width="100%" height="100%">
<s:CheckBox x="10" y="22" label="always on top" selected="true" click="checkbox1_clickHandler(event)" id="cbAlwaysOnTop"/>
</s:NavigatorContent>
</mx:TabNavigator>
Когда я нажимаю кнопку, я получаю сообщение об ошибке:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
Что я делаю не так?
Это сработает, если я сначала переключусь на 2-ю вкладку, а затем обратно и нажму кнопку.
Ответ №1:
Вероятно, вы находитесь в неправильном контексте и у вас нет ссылки на cbAlwaysOnTop
.
Где находится ваша кнопка и где у вас есть код обработки?
Редактировать: ах, с вашим комментарием внизу, я думаю, я знаю, что происходит, кажется, что NavigatorContent создает свое содержимое только при навигации по нему, поэтому, если вы попытаетесь получить доступ к флажку внутри без предварительного открытия вкладки, он не был создан и выдает вам ошибку нулевой ссылки.
Поскольку, я полагаю, вы хотите, чтобы настройки сохранялись, решением было бы создать класс PresentationModel и привязать значение флажка, чтобы вы могли сохранять его между сеансами и извлекать, не полагаясь на элемент пользовательского интерфейса. Прочитайте эту замечательную статью, чтобы понять, что вам нужно сделать: http://riarockstars.com/2011/03/16/presentation-model-and-multiple-screens-part-1 /
Ответ №2:
Хорошо, я нашел простое решение для этого, используя:
creationPolicy="all"
Используя это в:
<mx:TabNavigator id="x1" x="0" y="0" width="100%" height="100%" creationPolicy="all">
решило бы проблему.