2013-04-04 37 views
1

我有select2控件與多個選擇顯示用戶的角色,我從服務器獲取selectedRoles集合,而select2只需要選定的項目的ID只有不是整個集合。Select2 with knockout如何顯示選擇的項目?

<select multiple="multiple" 
data-bind="options: AllRoles, optionsValue: 'Id', optionsText: 'Name', selectedOptions: selectedRole, select2: {}"></select> 

我在observableArray中選擇了角色作爲集合,但select2需要收集字符串以顯示選定的項目。

AllRoles = ko.observableArray([{Id: '111', Name: 'Test'}, {Id: '2222', Name: 'TTTTT'}]); 
selectedRole = ko.observableArray(["111","2222"]); 
??? selectedRoles = ko.observableArray([{Id: '111', Name: 'Test'}, {Id: '2222', Name: 'TTTTT'}]); 

什麼來解決這個問題,我應該有單獨的字符串數組或我可以與現有的收集做到這一點最好的方法?

這裏是例子fiddle

+1

您可以使用計算的觀察值來創建一個選定ID的數組:http://jsfiddle.net/WGukF/1/ – badsyntax 2013-04-04 09:39:26

回答

1

我假設的問題是,你必須從服務器對象數組,並希望以此爲源,哪些元素在你的提琴的下拉低預先選擇?

如果是這樣,問題是當您設置selectedOptions: selectedRoles時,Knockout將覆蓋此選項,因爲當所選值爲字符串時,它無法從包含對象的列表中推斷出所選項目。但是,您可以創建一個計算變量,但它適用於selectedRoles陣列。綁定selectedOptions可以使用這個很好。

self.selectedRolesComp = ko.computed(function() { 
    var l = []; 
    for(var i = 0; i < self.selectedRoles().length; i++) { 
     l.push(self.selectedRoles()[i].Id); 
    } 
    return l; 
}); 

十分硬朗http://jsfiddle.net/WGukF/2/

採取進一步看看http://knockoutjs.com/documentation/computedObservables.html更多。

相關問題