2009-01-30 23 views
1

使用一個部件引用考慮下面的單選按鈕的例子。它是安全的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在當時是空的,但我可以用了selectedValue設置初始selction。

我只是想知道這是一些特殊的情況下,或它不是安全,是指部件在MXML一般。

感謝,

回答

1

我不太清楚你問什麼,但希望這會回答你的問題 - 從Flex文檔:

RadioButtonGroup.selection
包含對 組中當前 選定的RadioButton控件的引用。只能在 ActionScript中訪問該屬性; 它不是在MXML設定 。將此屬性設置爲null 可取消對當前所選 單選按鈕控制。

儘管如此,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

一般:只是因爲控制在MXML中聲明並不意味着它是在運行時(可能從AS被刪除,沒有創造的是,不添加到舞臺上,因此某些屬性尚未公佈)。這表明在運行時訪問組件並且依賴於值是不安全的。

+0

當然,如果組件的MXML中聲明,然後在其父母的生命週期中的一個階段的一些從顯示列表中的顯影劑去除,那麼,這將是不存在的。但總的來說,如果您在MXML中聲明組件,在creationComplete之後進行處理,它們將始終存在。 – 2009-01-31 04:51:03