2011-08-09 3 views
3

은 내가<S : DropDownList로 selectedItem가

<s:DropDownList dataProvider="{DP_PAT_CIVIL}" selectedItem="@{objectUser.usrQualParent}"/> 

을하려고하지만 아무도 선택, 아무것도 프롬프트에 표시되지 나타나지 내 <s:DropDownList

에 값을 선택 내 데이터베이스 필드 값을 사용하는 것입니다.

objectUser.usrQualParent는 dataprovider에있는 값이 DP_PAT_CIVIL임을 나타냅니다.

는 exemple를 들어, dataProvider의는 다음과 같습니다

[Bindable] 
     private var DP_PAT_CIVIL:ArrayCollection = new ArrayCollection (
      [{label:"Monsieur" , data:"0"}, 
      {label:"Madame", data:"1"}, 
      {label:"Mademoiselle", data:"2"}, 
      {label:"Le Jeune", data:"3"}] 

      ); 

그리고 objectUser.usrQualParent 값은 "Monsieur"입니다.

감사합니다.

+0

아무것도 드롭 다운리스트에 표시 또는 프롬프트? – Benny

답변

6

선택한 항목은 데이터 제공 업체의 정확한 항목을 가리켜 야합니다. 데이터 제공자가 구성 할 수있는 간단한 유형 (예 : String, Boolean 또는 int)의 경우 해당 값과 같을 수 있습니다. 복잡한 객체의 경우 정확히 동일한 값 (동일한 메모리 유닛에 대한 포인터)이어야합니다.

따라서 귀하의 경우 "Monsieur"은 (는) Object (으)로 구성되어 있지만 String이 아닌 데이터 제공 업체의 항목이 아닙니다. 그러나 다음과 같은 방법도 아닙니다 :

<s:DropDownList dataProvider="{DP_PAT_CIVIL}" selectedItem="{{label:"Monsieur" , data:"0"}}"/> 

새로 생성되었지만 동일한 개체가 아니기 때문에 다음과 같은 것은 아닙니다.

은 당신이 열쇠로 문자열을 사용하여 기존 데이터 공급자에서 정확히 같은 값을 검색하기위한 몇 가지 함수를 작성하는 것이 좋습니다 :

private function getSelectedItem(dp:ArrayCollection, key:String):Object 
{ 
    if (dp && dp.length > 0) 
    { 
     for each (var item:Object in dp) 
     { 
      if (item.label == key) 
       return item; 
     } 
    } 
    return null; 
} 

지금 목록 :

<s:DropDownList dataProvider="{DP_PAT_CIVIL}" 
    selectedItem="{getSelectedItem(DP_PAT_CIVIL, objectUser.usrQualParent)}" 
    change="objectUser.usrQualParent = event.currentTarget.selectedItem.label"/> 
+0

감사합니다. 솔루션 작업이 아주 잘되었습니다. – Flex60460

관련 문제