我试图取代所有的项目的内容在observableArray
新内容。
var oldLocation = ko.utils.arrayFirst(self.locations(), function (item) {
return item.id == value.id;
});
self.locations.replace(self.locations.indexOf(oldLocation), new location(value));
self.locations.valueHasMutated();
我也试着
self.locations[self.locations.indexOf(location)] = new fizi.ko.models.location(value);
但是,没有什么工作。 该指数被正确地获取,但该项目的更新没有发生。
替换函数接受两个参数,要更换的项目,你要替换它的新项目。 你逝去的索引到位的项目来替代,因此无法正常工作。
替换调用应该是:
self.locations.replace(oldLocation, new location(value));
在一个侧面说明,你不应该需要valueHasMutated()
调用在那里,这将是由被调用replace()
调用。
我只是想提一提的另一种方式做到这一点:
self.locations.splice(
self.locations.indexOf(location), // Index of the 1st element to remove
1, // Number of elements to remote at this index
new fizi.ko.models.location(value) // A param for each element to add at the index
);
淘汰赛包括splice
的说明文件中,但不包括replace
: 淘汰赛Obervable阵列文档 。 但是,如果你看看源代码,你会看到两个功能被实现(至少在KO 3.0,我不知道是否replace
以前的版本失踪)。
我不知道在JavaScript中替代方法阵列,或在淘汰赛。 我缺少的东西吗?
如果你想使用你的第二个方法,那么您需要访问的地点作为可观察到的:
self.locations()[self.locations.indexOf(location)] = new fizi.ko.models.location(value);
self.locations.valueHasMutated();
虽然你使用的indexOf时,因为是对于观察到的阵列淘汰赛版别。