Безопасно ли использовать ссылку на компонент в 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 в это время имеет значение null, но я могу использовать selectedValue для установки начального выбора.

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

Спасибо,


person Faisal Mansoor    schedule 30.01.2009    source источник


Ответы (2)


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

RadioButtonGroup.selection
Содержит ссылку на выбранный в данный момент элемент управления RadioButton в группе. Вы можете получить доступ к свойству только в ActionScript; его нельзя установить в MXML. Установка для этого свойства значения null отменяет выбор текущего выбранного элемента управления 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> 

Имеет ли это смысл? Надеюсь, это не совсем не так; отправьте ответ и дайте мне знать, и я постараюсь помочь, чем смогу.

person Christian Nunciato    schedule 30.01.2009

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

person Community    schedule 31.01.2009
comment
Конечно, если компонент объявлен в MXML, а затем удален разработчиком из списка отображения на каком-то этапе жизненного цикла одного из его родителей, тогда да, он будет отсутствовать. Но по большому счету, если вы объявите компоненты в MXML, обработка после создания завершена, они всегда будут там. - person Christian Nunciato; 31.01.2009