在mxml中使用组件引用是否安全

时间:2009-01-30 19:55:25

标签: flex radio-button 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>

问题是我在定义RadioButtonGroup时不能引用rb1,当时rb1为null,但我可以使用selectedValue来设置初始选择。

我只是想知道这是一些特殊情况,或者通常在mxml中引用组件是不安全的。

谢谢,

2 个答案:

答案 0 :(得分:1)

我不太确定你在问什么,但希望这会回答你的问题 - 来自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> 

这有意义吗?希望它不是完全不合适的;回复并告诉我,我会尽力帮助。

答案 1 :(得分:0)

通常:仅仅因为在MXML中声明控件并不意味着它在运行时可用(它可能从AS中删除,尚未创建,未添加到阶段,因此某些属性尚不可用)。这表明在运行时访问组件并依赖于值是不安全的。