web-dev-qa-db-ja.com

Knockout.jsを使用して、特定の位置でObservableArrayにアイテムを追加/挿入する方法

私が見つけたすべてのノックアウトの例は、次のようなものを使用して、ObservableArrayの最後に新しい項目を追加するようです。

viewModel.SomeItems.Push(someNewItem);

もちろん、これは項目を配列の最後に配置します。

特定の位置でObservableArrayにアイテムを追加する方法は?

例えば。何かのようなもの:

viewModel.SomeItems.Push(someNewItem, indexToInsertItAt);
73
Mark Robinson

ネイティブJavaScript spliceメソッドを使用できるはずです-

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

ここのドキュメント- https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

ここの例(ノックアウト固有ではありません)- 特定のインデックスで配列にアイテムを挿入する方法?

Knockoutドキュメントから-

Pushやspliceなどの配列の内容を変更する関数の場合、KOのメソッドは自動的に依存関係追跡メカニズムをトリガーし、登録されているすべてのリスナーに変更が通知され、UIが自動的に更新されます。

82
ipr101

ノックアウト用

viewModel.SomeItems.unshift(someNewItem);

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

22

私はこの拡張機能を作成しました。スパース配列の最後に追加した場合、スプライスは機能しませんでした。

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');
12
Adam Tegen