1

我有带有多个选择的 select2 控件,用于显示用户的角色,并且我从服务器获取 selectedRoles 集合,而 select2 只需要选定项目的 id 而不是整个集合。

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

我在 observableArray 中选择了 Roles 作为集合,但 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'}]);

如果我有单独的字符串数组或者我可以用现有的集合来解决这个问题,那么解决这个问题的最佳方法是什么?

这是示例小提琴

4

1 回答 1

1

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

如果是这样,问题在于,当您设置敲除时selectedOptions: selectedRoles,敲除将覆盖它,因为当所选值是字符串时,无法从包含对象的列表中推断出选定的项目。但是,您可以创建一个计算变量来适应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了解更多信息。

于 2013-04-04T09:38:53.663 回答