如何防止在数组值未更改时触发计算()

时间:2013-06-14 05:24:34

标签: knockout-2.0

这似乎是一个本来应该已经回答的问题,但我还没有找到任何关于此的讨论。

我有一系列项目,其中一些可能会被选中:

function Item(name) {
    this.name = name;
    this.selected = ko.observable(false);
}

function ViewModel() {
    var self = this;
    this.items = ko.observableArray([]);

    this.selected = ko.computed(function() {
        return ko.utils.arrayFilter(self.items(), function (item) {
            return item.selected();
        });
    }, this);
}

由于viewmodel.selected()取决于viewmodel.items(),每当我向items添加新对象时,selected可观察对象也会发生变化,即使未选择添加的项目也是如此。如果没有实际选择新项目,如何阻止this.selected()更新?

1 个答案:

答案 0 :(得分:0)

我不确定您是否可以使用纯粹的ko.computed解决方案实现这一目标。 也许您可以订阅您的“项目”更改。添加一个项目时,检查它是否被选中并将其推送到另一个observableArray(如果是)。

查看此问题的第一个答案:Determine which element was added or removed with a Knockoutjs ObservableArray 它允许您订阅“项目”(项目添加或删除)的特定更改。