Javascript 从两个可观测数组中获取计算值

Javascript 从两个可观测数组中获取计算值,javascript,knockout.js,Javascript,Knockout.js,我读了很多线程,没有足够的信息如何计算两个可观察数组,跟踪它们的添加/删除和更新计算可观察数组,因为现在计算只更新一次,而不会更改,而这两个数组已经有很多更改 这是 下面是它背后的代码: var VM = function () { var self = this; self.first = ko.observableArray([{ Id: 1, name: "john" }, { Id: 3, name

我读了很多线程,没有足够的信息如何计算两个可观察数组,跟踪它们的添加/删除和更新计算可观察数组,因为现在计算只更新一次,而不会更改,而这两个数组已经有很多更改

这是

下面是它背后的代码:

var VM = function () {
    var self = this;

    self.first = ko.observableArray([{
        Id: 1,
        name: "john"
    }, {
        Id: 3,
        name: "steve"
    }, {
        Id: 5,
        name: "roger"
    }]);

    self.second = ko.observableArray([{
        Id: 2,
        name: "laker"
    }, {
        Id: 4,
        name: "don"
    }, {
        Id: 6,
        name: "idiot"
    }]);

    self.both = ko.computed(function () {
        return self.first().concat(self.second());
    });

    self.removePerson = function (v) {
        (self.first().indexOf(v) !== -1) ? ko.utils.arrayRemoveItem(self.first(), self.first()[self.first().indexOf(v)]) : ((self.second().indexOf(v) !== -1) ? ko.utils.arrayRemoveItem(self.second(), self.second()[self.second().indexOf(v)]) : console.log("Item doesnt exist"));
    }
}

ko.applyBindings(new VM());

问题:
每次更改
第一次
第二次
后,我如何使
计算的
更新?

您的计算结果正常,您的
删除人员
工作不正常

因此,不要在UI上看到更改,因为当您使用
ko.utils.arrayRemoveItem
时,它会从基础数组中删除项,这样ko就不会知道这些更改,所以不会更新计算结果

一种修复方法是在移除后在数组上调用
valueHasMutated()
,这将触发计算的更改。()

或者您可以使用myObservableArray.remove(someItem)方法(请参阅):


演示

一组线程?感谢上帝你还活着。祝您有个美好的一天。
self.removePerson = function (v) {
    (self.first().indexOf(v) !== -1) 
    ?  self.first.remove(v) 
    :  self.second.remove(v)
}