2

observableArray相互に参照せずにある値から別の値に値を渡そうとしています。同期する監視可能な配列値の1つを変更し、両方が同じ値を持つかどうかを正しく知っています。

ここにjsFiddleがあります

JavaScript :

var test = ko.observableArray([1, 2, 3]);
var test2 = ko.observableArray(test());
test2()[0] = 2;
console.log(test());
console.log(test2());

出力:

[2,2,3]
[2,2,3]

期待される:

[1,2,3]
[2,2,3]
4

1 に答える 1

3

これを試してください:

var test2 = ko.observableArray(test().slice(0));

これの代わりに:

var test2 = ko.observableArray(test());

これは、基になる配列のクローンを作成する簡単な方法です。現在、同じ配列を参照しています。

このslice関数は基本的に、指定されたインデックス (この場合は 0) から始まる要素を選択し、配列の長さの終わり (指定されていないため) で終わる要素を新しい配列として選択します。

KnockoutJSから:

スライス関数は、ネイティブの JavaScript スライス関数と同等の observableArray です (つまり、特定の開始インデックスから特定の終了インデックスまでの配列のエントリを返します)。myObservableArray.slice(...) を呼び出すことは、基になる配列 (つまり、myObservableArray().slice(...)) で同じメソッドを呼び出すことと同じです。

これがJSFiddleの更新です。

于 2013-09-22T22:10:55.373 に答える