0

我正在将一个集合绑定到一个 select multi,集合中的一些项目具有属性“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);
4

1 回答 1

2

ko.utils.arrayFilter是在此处使用的正确方法(您可以在此处阅读有关它的更多信息:KnockoutJS 中的实用程序函数):

selectedThings: ko.utils.arrayFilter(initialThingsModel, 
    function(item) { return item.Selected == "True"; })

演示JSFiddle。

如果您想在selectedThings添加/删除项目时进行更改,availableThings则需要将其包装ko.utils.arrayFilterko.computed

var viewModel = {
     availableThings: ko.observableArray(initialThingsModel),               
};
viewModel.selectedThings = ko.computed(function() { 
    return ko.utils.arrayFilter(viewModel.availableThings(), 
       function(item) { return item.Selected == "True";}) 
});

演示JSFiddle。

于 2013-04-13T18:19:20.890 回答