我有2个observablearray.当我将项目从observablearray1复制到observablearray2,并在observablearray2中更改值时,也会在observablearray1中进行更改.
var viewModel = (function() {
var
array1 = ko.observableArray(['John', 'Joe', 'Jim']),
array2 = ko.observableArray();
// copy
array2(array1());
array2()[2] = 'Mary';
return {
array1: array1,
array2: array2
}
})();
ko.applyBindings(viewModel);
console.log(viewModel.array1());
console.log(viewModel.array2());
Run Code Online (Sandbox Code Playgroud)
结果:
阵列1
John
Joe
Mary
阵列2
John
Joe
Mary
怎么解决?谢谢
Ben*_*aum 21
Knockout仍会跟踪依赖项,因为它仍然是一个带有引用的数组observableArray.这样做时array2(array1()),两个可观察对象仍然引用相同的对象.
传递数组的副本(不需要显式复制元素).
array2(array1().slice(0));
Run Code Online (Sandbox Code Playgroud)
或者,KnockoutJS使用自己的切片方法填充observableArrays,您可以调用它
array2(array1.slice());
Run Code Online (Sandbox Code Playgroud)
来自文档:
slice - slice函数是与本机JavaScript切片函数等效的observableArray(即,它将给定起始索引的数组条目返回到给定的结束索引).调用myObservableArray.slice(...)相当于在底层数组上调用相同的方法(即myObservableArray().slice(...)).