我在淘汰赛中遇到一些关系问题 在我的项目中,我将itemTypes中的项目复制到currentWindow.constructionParametres,然后通过
进行更改this.currentWindow().constructionParametres().items()[0].currentStep(2)
但它也在构造类型中发生了变化。我尝试过slice(),但没有成功 我该怎么办? 感谢。
function ReservationsViewModel() {
this.constructionTypes = ko.observableArray([
{ id: 1, items: ko.observableArray([
{ type: 1, currentStep: ko.observable(1), steps: []},
{ type: 0, currentStep: ko.observable(1), steps: []},
{ type: 0, currentStep: ko.observable(1), steps: []},
{ type: 0, currentStep: ko.observable(1), steps: []}
])
},
{ id: 2, items: ko.observableArray([
{ type: 1, currentStep: ko.observable(1), steps: []},
{ type: 2, currentStep: ko.observable(1), steps: []},
{ type: 0, currentStep: ko.observable(1), steps: []},
{ type: 0, currentStep: ko.observable(1), steps: []}
])
}
]);
this.currentWindow = ko.observable({
id: ko.observable(0),
name: ko.observable('Need 1'),
constructionParametres: ko.observable( this.constructionTypes().slice()[0] )
});
this.currentWindow().constructionParametres().items()[0].currentStep(2);
this.currentWindow().constructionParametres().items()[0].currentStep(3);
}
ko.applyBindings(new ReservationsViewModel());
答案 0 :(得分:0)
Array.slice
会创建一个数组副本,但数组项是引用到对象。因此,复制数组的一部分不是解决方案,因为原始数据集和复制数组中的项目将引用相同的对象。
您可以考虑使用内置ko.toJS
函数来创建对象的 plain 副本( plain 意味着所有可观察对象都将变为不可观察的) 。也许这种方法不是你所期望的,但它有效:http://jsfiddle.net/ostgals/xveEP/73/