2009-01-30 14 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> 

문제는 RadioButtonGroup 구성을 정의하는 동안 나는 RB1를 참조 할 수 없다는 것입니다, RB1 그 시간에 null의 경우,하지만 난 초기 selction을 설정 selectedValue를 사용할 수 있습니다.

저는이 특별한 경우인지 또는 일반적으로 mxml의 구성 요소를 참조하는 것이 안전하지 않은지 궁금합니다.

감사합니다,

답변

1

난 당신이 요구하고, 그러나 희망이 귀하의 질문에 답변 해 드리겠습니다 것을 아주 확실하지 않다 - 플렉스 문서에서 :

RadioButtonGroup.selection
가 포함 현재 그룹에서 선택된 RadioButton 컨트롤에 대한 참조입니다. 액션 스크립트에만 의 속성에 액세스 할 수 있습니다. 을 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> 

이 메이크업 감각을합니까? 다행히도 완전히 벗어난 것은 아닙니다. 다시 게시하고 알려주고 최선을 다해 도와 드리겠습니다.

0

일반적으로 컨트롤이 MXML로 선언 되었기 때문에 런타임에 사용할 수 있다는 의미는 아닙니다 (AS에서 삭제되거나 아직 생성되지 않았으며 스테이지에 추가되지 않았기 때문에 일부 속성은 아직 제공되지 않음). 이는 런타임에 구성 요소에 액세스하는 것이 안전하지 않고 값에 의존한다는 것을 나타냅니다.

+0

물론, 구성 요소가 MXML로 선언 된 후 부모의 라이프 사이클 중 일부 단계에서 개발자가 디스플레이 목록에서 제거한 경우 그렇습니다. 그러나 MXML로 컴포넌트를 선언하고 creationComplete 이후에 처리하면 항상 존재하게됩니다. –