2013-04-04 76 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更多。

相关问题