2013-04-13 3 views
0

컬렉션을 선택 멀티에 바인딩하고 있는데 컬렉션의 일부 항목에 "Selected"속성이 있습니다. "True"로 선택 항목의 selectedOptions로 설정하고 싶습니다. 다중, 내가 ko.utils.arrayFilter를 사용하여 이들을 필터링 한 다음 selectedOptions로 설정 하겠지만, 내 인생에서이 작업을 수행하는 가장 좋은 방법은 없습니다.Knockout.Js selectedOptions가 옵션에서 필터링되었습니다.

enyone 도움이 될 수 있습니다. ko.utils.arrayFilter가 여기에 추가 된 모든 것을 포함하는 피들러 페이지를 설정했습니다. http://jsfiddle.net/dumbarse/TpnZh/3/.

<select data-bind="options:availableThings,optionsText: 'Title', selectedOptions: selectedThings" size="5" multiple="true"></select> 

Var initialThingsModel = [ 
      {"Id":1,"Title":"First","Selected":"True"}, 
      {"Id":2,"Title":"Next"}, 
      {"Id":3,"Title":"Another","Selected":"True"}, 
      {"Id":4,"Title":"Last"} 
     ]; 

     var viewModel = { 
      availableThings: ko.observableArray(initialThingsModel), 
      selectedThings: ko.observableArray(),     
     }; 

     ko.applyBindings(viewModel); 

답변

2

ko.utils.arrayFilter 여기에 사용할 수있는 권리 방법이다 (당신은 여기에 대한 자세한 내용을보실 수 있습니다 : Utility Functions in KnockoutJS를)

selectedThings: ko.utils.arrayFilter(initialThingsModel, 
    function(item) { return item.Selected == "True"; }) 

데모 JSFiddle.

추가 할 때 selectedThings 변화를 원하는 경우 항목을 availableThings으로 가져 오려면 ko.utils.arrayFilterko.computed :

개로 다시 묶어야합니다. 10
var viewModel = { 
    availableThings: ko.observableArray(initialThingsModel),    
}; 
viewModel.selectedThings = ko.computed(function() { 
    return ko.utils.arrayFilter(viewModel.availableThings(), 
     function(item) { return item.Selected == "True";}) 
}); 

데모 JSFiddle.