0

ノックアウトでの人間関係に問題があります。
私のプロジェクトでは、項目を constructionTypes から currentWindow.constructionParametres にコピーしてから、変更します

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 に答える