2

我试图在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]
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 回答