Knockout.Js selectedOptions从选项中过滤

时间:2013-04-13 18:09:56

标签: jquery knockout.js

我将一个集合绑定到一个选择多个集合中,集合中的一些项目具有属性“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);

1 个答案:

答案 0 :(得分:2)

ko.utils.arrayFilter是在这里使用的正确方法(您可以在此处详细了解:Utility Functions in KnockoutJS):

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

演示JSFiddle.

如果您希望在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";}) 
});

演示JSFiddle.