2009-01-30 3 views
1

Рассмотрим следующий пример с помощью переключателя.Можно ли использовать ссылку на компонент в mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 
<mx:Script> 
<![CDATA[ 
    private function getRb1():RadioButton { 
     trace(rb1 == null); 
     return rb1;      
    } 
]]> 
</mx:Script> 
<mx:VBox> 
    <mx:RadioButtonGroup **id="rbg" selection="{getRb1()}**"/>  
    <mx:RadioButton id="rb1" label="Radio Button 1" /> 
    <mx:RadioButton id="rb2" label="Radio Button 2" /> 
    <mx:RadioButton id="rb3" label="Radio Button 3" /> 
</mx:VBox> 
</mx:Application> 

Проблема заключается в том, что я не могу обратиться к RB1 при определении RadioButtonGroup, RB1 равна нуль в то время, но я могу использовать SelectedValue, чтобы установить начальные выделенную.

Мне просто интересно, это какой-то частный случай или его небезопасно ссылаться на компоненты в mxml вообще.

Спасибо,

ответ

1

Я не совсем уверен, что вы просите, но, надеюсь, это будет ответить на ваш вопрос - от Flex Docs:

RadioButtonGroup.selection
Содержит ссылка на текущий выбранный элемент управления RadioButton в группе . Вы можете получить доступ к свойству только в ActionScript; не устанавливается в MXML. Установка этого свойства в нуль отменяет выделение выбранного в данный момент управления RadioButton.

В целом, однако, что ссылки на компоненты в MXML полностью прекрасны; именно так эффекты часто обрабатываются, среди многих других вещей. Например:

<mx:Glow id="g" /> 
<mx:Label showEffect="{g}" /> 

Однако в вашем случае, если вы находитесь с настройкой выбранного пункта, это может быть потому, что вы не указали атрибут радиокнопок group проблемы; что отделяет компонент группы от отдельных кнопок. После того, как вы добавляете, что вы можете связать свойство выбора группы с помощью Bindable переменной, содержащей ссылку на компонент, например, так:

<mx:Script> 
    <![CDATA[ 

     [Bindable] 
     private var selectedRadioButton:RadioButton;  

     private function this_creationComplete(event:Event):void 
     { 
      selectedRadioButton = rb1; 
     } 

     private function btn_click(event:Event):void 
     { 
      selectedRadioButton = rb2; 
     } 

    ]]> 
</mx:Script> 
<mx:VBox> 
    <mx:RadioButtonGroup id="rbg" selection="{selectedRadioButton}" /> 
    <mx:RadioButton id="rb1" group="{rbg}" label="Radio Button 1" /> 
    <mx:RadioButton id="rb2" group="{rbg}" label="Radio Button 2" /> 
    <mx:RadioButton id="rb3" group="{rbg}" label="Radio Button 3" /> 

    <mx:Button label="Choose a Different Button" click="btn_click(event)" /> 
</mx:VBox> 

ли это смысл? Надеюсь, это не совсем так. отправьте мне сообщение и сообщите мне, и я постараюсь помочь как можно лучше.

0

Как правило, только потому, что элемент управления был объявлен в MXML, это не значит, что он доступен во время выполнения (он может быть удален из AS, еще не создан, не добавлен в этап, поэтому некоторые свойства еще недоступны). Это указывает на то, что небезопасно обращаться к компонентам во время выполнения и зависит от значений.

+0

Конечно, если компонент объявлен в MXML и затем удален разработчиком из списка отображения на какой-то стадии жизненного цикла одного из его родителей, то да, он будет отсутствовать. Но в целом, если вы объявляете компоненты в MXML, обрабатывая после createComplete, они всегда будут там. –

Смежные вопросы