Безопасно ли использовать ссылку на компонент в mxml

StackOverflow https://stackoverflow.com/questions/496982

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

Спасибо,

Это было полезно?

Решение

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

RadioButtonGroup.выбор
Содержит ссылку на текущий выбранный элемент управления 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> 

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top