0

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

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

我当前的实现迭代“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/

4

1 回答 1

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();
    });
});
于 2013-05-01T03:37:49.327 回答