Knockout.js 选择2带敲除如何在选择中显示所选项目?

Knockout.js 选择2带敲除如何在选择中显示所选项目?,knockout.js,knockout-mapping-plugin,jquery-select2,Knockout.js,Knockout Mapping Plugin,Jquery Select2,我使用带有多个select的select2控件来显示用户的角色,我从服务器获取selectedRoles集合,而select2只需要选定项的id,而不需要整个集合 <select multiple="multiple" data-bind="options: AllRoles, optionsValue: 'Id', optionsText: 'Name', selectedOptions: selectedRole, select2: {}"></select>

我使用带有多个select的select2控件来显示用户的角色,我从服务器获取selectedRoles集合,而select2只需要选定项的id,而不需要整个集合

<select multiple="multiple" 
 data-bind="options: AllRoles, optionsValue: 'Id', optionsText: 'Name', selectedOptions: selectedRole, select2: {}"></select>
解决此问题的最佳方法是使用单独的字符串数组还是使用现有集合


下面是一个示例

我假设问题是您有一个来自服务器的对象数组,并且希望将其用作在小提琴的下拉列表中预选哪些元素的源

如果是这样,问题是当您设置
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;
});
self.selectedrolescop=ko.computed(函数(){
var l=[];
for(var i=0;i
像小提琴一样


进一步了解更多信息。

我假设问题在于您有一个来自服务器的对象数组,并且希望将其用作在小提琴的下拉列表中预选哪些元素的源

如果是这样,问题是当您设置
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;
});
self.selectedrolescop=ko.computed(函数(){
var l=[];
for(var i=0;i
像小提琴一样


进一步了解更多信息。

您可以使用计算的可观察对象创建选定Id的数组:您可以使用计算的可观察对象创建选定Id的数组: