从两个可观测数组中获取计算值
Get computed value from two observable arrays
我读了很多线程,但没有足够的信息来计算两个可观察数组,跟踪它们的添加/删除,并更新计算的可观察数组。因为现在计算只更新一次,从不更改,而这两个数组已经做了很多更改。
这是JsFiddle
这是它背后的代码:
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());
问题
每次更改first
或second
后,如何更新computed
您的计算很好,您的removePerson
工作不正确。
因此,不要在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)
}
演示JSFiddle。
相关文章:
- 从json子数组获取数据
- 从javascript数组获取php的日期时间
- 从表中的 JSON 数组获取数据
- 每个表的2D数组获取坐标JTSL,JAVASCRIPT
- javascript从元素到数组获取文本
- 如何从数组获取链接以在youtube Iframe API中播放
- JSON 编码多维数组获取值
- 如何从两个 JSON 数组获取增量
- 通过单击按钮数组获取隐藏 html 元素值的当前数组
- 在 JavaScript 中从内部数组获取数据
- 从数组获取非重复索引在 0 时失败
- JavaScript 从对象中的数组获取数组
- 如何通过 ajax 将 php 数组作为 javascript 数组获取
- 快速从 2D 数组获取索引,无需迭代 jquery
- 从 Nodejs socketio 数组获取所有套接字 id
- 无法动态从 json 数组获取数据
- 如何在javascript中使用数组获取和设置html标签的值
- jQuery对象数组获取一个项作为jQuery对象
- 如何在不向输出数组获取空值的情况下拆分字符串
- 从输入到数组获取数据