0

我在淘汰赛中的关系有些问题。
在我的项目中,我将项目从 constructionTypes 复制到 currentWindow.constructionParamets 然后更改

this.currentWindow().constructionParametres().items()[0].currentStep(2)

但它在 constructionTypes 上也发生了变化。我尝试了 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());

http://jsfiddle.net/xveEP/72/

4

1 回答 1

0

Array.slice在您的情况下创建数组的副本,但数组项是对对象的引用。因此复制数组的一部分不是解决方案,因为原始数组和复制数组中的项目将引用相同的对象。

您可以考虑使用内置ko.toJS函数来创建对象的副本(意味着所有可观察对象都将变为不可观察对象)。也许这种方法不是您所期望的,但它有效:http: //jsfiddle.net/ostgals/xveEP/73/

于 2013-10-13T11:52:57.183 回答