2014-11-05 2 views
0

내 얼굴을 꼼짝 못하게보고있는 작은 문제가 있음을 알고 있습니다. 알아낼 수 없습니다.Ember가 선택한 항목을 표시하지 않습니다.

selectedItem = {"id":"item1","desc":"item number is 1"}; 

아래로 선택 드롭

아래는 이제 선택 데서을

selectedItem = baseList.filterBy('id','item1')[0]; 

작동 선택한 항목을 표시하지 않습니다 작동하지 않습니다

다음
{{view Ember.Select       
    content=baseList   
    optionLabelPath="content.desc" 
    optionValuePath="content.id" 
    selectionBinding="selectedItem" 
}} 

baseList = [{"id":"item1","desc":"item number is 1"},{"id":"item2","desc":"item number is 2"}] 

을 고려 p 아래로 누르면 선택한 항목이 표시됩니다.

무엇이 문제입니까? 나는 심지어 속성의 순서 (id와 desc)가 적절한 지 점검했다. 어떤 알고리즘을 사용하지 않거나 오히려 JSON.stringify을 사용하지 않으면 두 객체를 직접 비교할 수 없기 때문입니까?

답변

2

문제는 당신이

selectedItem = {"id":"item1","desc":"item number is 1"}; 

를 지정할 때 해시 그것은 전적으로 동일, 비록 baseList에있는 것과 다른 개체입니다 것입니다. 그래서 Ember는 baseList에서 그것을 찾을 수 없습니다 (이것은 ===과 비교됩니다). 반면에 filterBy을 수행하면 baseList에서 실제 객체가 반환되며 Ember.SelectbaseList에서 찾을 수 있습니다.

대신 valueBinding을 사용해 볼 수도 있습니다. 그러면 "item1"을 지정할 수 있습니다.

현재, 속성의 순서는 JS에서 다른 곳이나 다른 곳에서는 차이가 없습니다.

+0

"해시가 baseList에있는 것과 다른 개체입니다."라고 생각했습니다.
고맙습니다. "valueBinding"은 내가 찾고있는 것입니다.
"속성 순서"라고 생각하면 JSON.stringify를 수행하고 비교할 때 특히 유용합니다. 그러나이 경우에는 문자열 비교가 더 많이됩니다.
전체적으로 당신이 옳습니다. 엄청 고마워 – wallop

관련 문제