Replacing item in observableArray
我正在尝试用新内容替换
1 2 3 4 5 | 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(); |
我也尝试过
1 | self.locations[self.locations.indexOf(location)] = new fizi.ko.models.location(value); |
但是没有任何效果。正在正确检索索引,但没有更新项目。
replace函数接受两个参数,您要替换的项目和您要替换的新项目。您正在传递索引代替要替换的项目,因此它不起作用。
替换调用应为:
1 | self.locations.replace(oldLocation, new location(value)); |
另一方面,您不需要在那里的
请注意,许多本机Array函数可用于可观察数组。根据需要将它们转发到触发突变通知的基础数组值。这些包括:
Knockout提供了这些附加方法,这些方法应在此处记录(当前为v3.5.1):
我只想提及另一种方法:
1 2 3 4 5 | 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 ); |
淘汰赛在其文档中包括
我不知道JavaScript在数组中还是在淘汰赛中的替换方法。我想念什么吗?
如果要使用第二种方法,则需要以可观察的方式访问位置:
1 2 | self.locations()[self.locations.indexOf(location)] = new fizi.ko.models.location(value); self.locations.valueHasMutated(); |
尽管在使用indexOf时不需要,但是存在可观察到的数组的Knockout版本。