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