s: флажок — получение выбранного значения

#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">
  

решило бы проблему.