我发现的所有淘汰示例似乎都使用以下内容在ObservableArray的末尾添加了一个新项:
viewModel.SomeItems.push(someNewItem);
这当然会将项目放在数组的末尾。
如何在特定位置向ObservableArray添加项目?
例如。类似的东西:
viewModel.SomeItems.push(someNewItem, indexToInsertItAt);
答案 0 :(得分:82)
您应该可以使用原生JavaScript splice
方法 -
viewModel.SomeItems.splice(2,0,someNewItem);
这里的文档 - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice
这里的示例(不是Knockout特定的) - How to insert an item into an array at a specific index?
来自Knockout文档 -
对于修改数组内容的函数,例如push和 splice,KO的方法自动触发依赖性跟踪 机制,以便所有注册的听众都收到通知, 并且您的UI会自动更新。
答案 1 :(得分:22)
使用淘汰赛
viewModel.SomeItems.unshift(someNewItem);
另请参阅:http://knockoutjs.com/documentation/observableArrays.html
答案 2 :(得分:12)
我做了这个扩展功能,对我来说效果很好。如果我添加到稀疏数组的末尾,Splice对我不起作用。
ko.observableArray.fn.setAt = function(index, value) {
this.valueWillMutate();
this()[index] = value;
this.valueHasMutated();
}
这甚至适用于:
var a = ko.observableArray(['a', 'b', 'c']);
a.setAt(42, 'the answer');