Безопасно ли использовать ссылку на компонент в mxml? - PullRequest
1 голос
/ 30 января 2009

Рассмотрим следующий пример переключателя.

<?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 в целом.

Спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2009

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

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 голосов
/ 31 января 2009

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

...