如何使用Knockout.js将项添加/插入到某个位置的ObservableArray中

时间:2011-09-06 09:43:25

标签: javascript mvvm knockout.js

我发现的所有淘汰示例似乎都使用以下内容在ObservableArray的末尾添加了一个新项:

viewModel.SomeItems.push(someNewItem);

这当然会将项目放在数组的末尾。

如何在特定位置向ObservableArray添加项目?

例如。类似的东西:

viewModel.SomeItems.push(someNewItem, indexToInsertItAt);

3 个答案:

答案 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');