我有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());
结果:
阵列1
约翰·
乔
玛丽
阵列2
约翰·
乔
玛丽
如何解决?谢谢
淘汰赛仍会跟踪依赖关系,因为它仍然是带有引用的数组observableArray
。这样做时array2(array1())
,两个可观察对象仍引用相同的对象。
而是传递数组的副本(无需显式复制元素)。
array2(array1().slice(0));
另外,KnockoutJS使用自己的slice方法填充observableArrays,您可以调用它
array2(array1.slice());
从文档:
slice-slice函数相当于本机JavaScript slice函数的observableArray(即,它从给定的开始索引到给定的结束索引返回数组的条目)。调用myObservableArray.slice(...)等效于在基础数组上调用相同的方法(即,myObservableArray()。slice(...))。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句