2009-07-17 3 views
1

Repeater 구성 요소를 사용하여 라디오 버튼 집합을 구성하는 flex MXML UI가 있습니다.필드의 값을 기반으로 UI 작성시 MXML 구성 요소를 선택하는 방법이 있습니까?

<mx:Repeater id="radios" 
      dataProvider="{_lists.(@id == [email protected]_list).group.listItem}"> 
    <mx:RadioButton groupName="responses" 
        label="{[email protected]}" 
        data="{[email protected]}"/> 
</mx:Repeater> 

원하는 작업은 repeater 내의 구성 요소 (이 예제의 RadioButton)를 선택하는 것입니다. currentItem의 값에 따라 : currentItem의 값이 "foo"인 경우, 예를 들어 Button이 필요하거나 "bar"인 경우 RadioButton이 필요합니다. MXML 구성 요소에서 이러한 종류의 조건부 작성을 수행 할 수 있습니까 아니면 그것을 수행하기 위해 ActionScript로 되돌려 야합니까?

나는이 라인을 따라 뭔가를 생각하고있다 :

<mx:Repeater id="r" dataProvider="{list}"> 
    <mx:If test="{[email protected] == 'radio'}"> 
     <mx:RadioButton label="{[email protected]}" /> 
    </mx:If> 
    <mx:If test="{[email protected] == 'specify'}"> 
     <custom:Specify label="{[email protected]}" /> 
    </mx:If> 
</mx:Repeater> 

답변

4

올바른 방법은 일반 팔자 'for 루프와 ActionScript를 :

for each (var o:Object in yourDataProvider) 
{ 
    if (o.someProperty) 
    { 
     var rb:RadioButton = new RadioButton(); 
     yourContainer.addChild(rb); 
    } 
    else 
    { 
     var s:Specify = new Specify(); 
     yourContainer.addChild(s); 
    } 
} 

당신은 slashnick 알 수 있듯이 할, 그냥 (어떤 종류의 테스트를 기반으로 자신의 표시를 전환, 리피터의 각 반복에 두 구성 요소를 추가 할 수있는 경우 includeInLayout 속성을 포함하는 것이 좋습니다).하지만 그렇게하면 표시 목록이 부풀어 오를 것이고 결국에는 확장되지 않습니다. 어쨌든 ActionScript에서 끝내기 만하면됩니다.

2

나는 당신이 어떤 조건 액션 스크립트를 사용하는 것 같아요. mxml에는 조건문이없는 것 같습니다. 두 요소를 모두 포함하고 인라인을 사용하여 표시 상태를 설정할 수도 있지만

<mx:Repeater id="r" dataProvider="{list}"> 
    <mx:RadioButton label="{[email protected]}" visible="{[email protected] == 'radio'}" /> 
    <custom:Specify label="{[email protected]}" visible="{[email protected] == 'specify'}" /> 
</mx:Repeater> 

자세한 내용은 http://www.firemoss.com/post.cfm/Powerful-MXML-Bindings-with-Ternary--Operators을 참조하십시오.

0

이 경우 AS3을 사용합니다. 제 의견으로는 mxml을 디스플레이 및 AS3 논리로 사용하는 것이 가장 좋습니다 ... .Net에서 코드 숨김을 사용하는 것과 비슷합니다.

+0

저는 손으로 구성 요소를 만드는 데 어려움을 겪고 있습니다. 즉 모든 데이터 바인딩을 손으로 처리해야한다는 의미입니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까? –

관련 문제