2011-04-20 6 views
0

내가 업데이트해야하는 상황을 가지고있는 DropDownList의 dataProvider 및 selectedItem가 특정 순서로한다. ... 내 경우여러 바인딩 가능한 속성을 특정 순서로 업데이트하는 방법은 무엇입니까? (플렉스)

<s:DropDownList id="dropDownList" 
       dataProvider="{someDataProvider}" 
       selectedItem="{someSelectedItem}" /> 

다음 코드를 참조, 일부 사용자 상호 작용은 새로운 바인딩 가능한 변수 "someDataProvider"에 대한 값 및 "someSelectedItem"를 생성합니다. 그러나, Flex가 DropDownList를 paint 할 때, 컨트롤의 선택된 값은 하늘입니다.

그 이유는 DropDownList로의 "selectedItem가"속성이 "dataProvider의"속성 전에 바인딩됩니다 것입니다. "selectedItem"이 유효하도록 "dataProvider"가 먼저 바인딩되어야합니다. 이는 새로운 "selectedItem"이 새 "dataProvider"를 가리키기 때문입니다.

제 질문은 특정 순서로 바인딩 가능한 속성을 업데이트하는 가장 좋은 방법은 무엇입니까? 몇 가지 방법 (예 : valueCommit 처리기 사용)을 제안했지만 커뮤니티에서 무엇을 말했는지 알고 싶습니다.

+0

내 충동은 말하고 있습니다. 바인딩을 사용하지 마십시오. 필요할 때 수동으로 속성을 업데이트하십시오. – JeffryHouser

답변

0

나는 문제가 데이터 공급자와 선택한 항목을 형성하는 순서로 생각하지 않습니다. 같은 Flash Player의 프레임에서 List로 설정 한 후 구성하는 경우 즉시 적용되지 않습니다. Flex는 무효화를 사용해 실제의 액션을 다음의 프레임에 연기합니다.

문제를 해결하려면 더 많은 코드를 게시하십시오. 데이터를 구성하는 코드를 게시하면 좋을 것입니다.

은 당신의 selectedItem가 정말 당신의 데이터 공급자 (일부 클론의 종류 정도)의 구성원이 아닌 것을 가능합니까? 데이터 공급자의 어떤 유형의 객체입니까?

0

그것은 오랫동안 나를 괴롭혔다있는 문제입니다. 그것은 의미가 있지만 그렇지 않습니다. 데이터가 실제로 변경되었거나 선택한 항목을 보유하지 않는 경우에만 selectedItem이 지워지도록해야합니다.

개인적으로, 난 그냥 DropDownList로를 확장하고의 selectedItem을 삭제 방지하는 dataProvider, selectedItem가와의 commitProperties를 오버라이드 (override) 사용자 정의 구성 요소를 만들 것입니다.

관련 문제