2013-09-22 65 views
2

我試圖將一個observableArray中的值傳遞給另一個,而彼此之間沒有引用,知道是否更改了它們同步的一個可觀察數組值,相同的價值。將值從observableArray傳遞到另一個,而不相互引用

這裏是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] 

回答

3

嘗試這樣做:

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

取而代之的是:

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

這是創建底層數組的一個克隆的簡單方法;現在你正在引用相同的數組。

slice函數基本上選擇從給定索引(本例中爲0)開始的元素,並在數組長度結尾(因爲未指定)作爲新數組結束。

KnockoutJS

切片功能是observableArray相當於本地 的JavaScript片功能(即,它從一個給定的開始指數上升返回你的陣列 的條目給定的結束索引)的。調用 myObservableArray.slice(...)等效於在底層數組(即myObservableArray()。slice(...))上調用相同的方法 。

這是您的JSFiddle的更新。

+0

不錯,這是從knockout故意還是這個javascript具體? – skmasq

+0

我已經添加了一個解釋'slice'函數的註釋。 –

+0

只是好奇,是不是'測試()'已經返回新的數組? – skmasq

相關問題