我将一个集合绑定到一个选择多个集合中,集合中的一些项目具有属性“Selected”:“True”,我想将这些设置为select multi中的selectedOptions,想想我会使用ko.utils.arrayFilter来过滤掉这些,然后将它们设置为selectedOptions,但对于我的生活,我找不到最好的方法。
可以提供帮助,我设置了一个Fiddler页面,除了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);
答案 0 :(得分:2)
ko.utils.arrayFilter
是在这里使用的正确方法(您可以在此处详细了解:Utility Functions in KnockoutJS):
selectedThings: ko.utils.arrayFilter(initialThingsModel,
function(item) { return item.Selected == "True"; })
如果您希望在selectedThings
添加/删除项目时进行availableThings
更改,则需要将ko.utils.arrayFilter
打包到ko.computed
:
var viewModel = {
availableThings: ko.observableArray(initialThingsModel),
};
viewModel.selectedThings = ko.computed(function() {
return ko.utils.arrayFilter(viewModel.availableThings(),
function(item) { return item.Selected == "True";})
});