如何使用Knockout.js在ObservableArray的某个位置添加/插入一个项

How to add/insert an item into an ObservableArray at a certain position with Knockout.js

本文关键字:插入 一个 添加 位置 js Knockout ObservableArray 何使用      更新时间:2023-09-26

我发现的所有令人惊叹的例子似乎都在ObservableArray的末尾添加了一个新项目,使用如下方式:

viewModel.SomeItems.push(someNewItem);

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

我如何添加一个项目到ObservableArray在某个位置?

。比如:

viewModel.SomeItems.push(someNewItem, indexToInsertItAt);

您应该能够使用原生JavaScript splice方法-

viewModel.SomeItems.splice(2,0,someNewItem);

Docs here - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

这里的例子(不是Knockout特定的)-如何在特定索引处插入一个项到数组中?

从Knockout文档-

用于修改数组内容的函数,如push和splice, KO的方法会自动触发依赖项跟踪机制,以便通知所有已注册的侦听器更改;你的UI会自动更新。

使用

viewModel.SomeItems.unshift(someNewItem);

参见:http://knockoutjs.com/documentation/observableArrays.html

我做了这个扩展函数,它对我来说很好。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');