Knockout:确定已选择数组中的哪些项目

时间:2013-05-01 02:57:22

标签: knockout.js single-page-application

或 - 确定是否已选择给定项目。

我有一个可以“检查”的对象数组 - 如果选中了一个项目的复选框,则应该为父元素激活一些条件属性(颜色应该更改)。我有条件的东西和复选框工作,我只是无法弄清楚如何有效地监控每个项目当前是否被选中。

我当前的实现迭代“selectedItems”数组,以确定它是否包含每个元素的目标元素。我觉得这是实现这个目标的最糟糕的方法:

var folderViewModel = function (data) {
    var self = this;
    self.isSelected = ko.computed(function () {
                var i = publishedSelectedFolders().length;
                debugger;
                while (i--) {
                    if (publishedSelectedFolders[i] === self.folderId()) {
                        alert("true");
                        return true;
                    }
                }
                return false;
            }, self);
             .....

任何提示都会很精彩。这是我的小提琴(尽可能简化):

http://jsfiddle.net/mWXTs/3/

1 个答案:

答案 0 :(得分:1)

我会反过来做 - 使用checked绑定绑定到isSelected(而不是选定项目的数组):

<input type="checkbox" data-bind="checked: isSelected" />

在每个文件夹上:

self.isSelected = ko.observable(false);

在父母身上:

vm.selectedItems = ko.computed(function() {
    return ko.utils.arrayFilter(vm.items(), function(item) {
        return item.isSelected();
    });
});