5

'Deletions'と呼ばれるobservableArrayで削除されたオブジェクトを追跡します。UIでその配列を解析して、「削除を元に戻す」リンクを作成しましたが、これを機能させることができません。コードは非常に単純で、次のようになります。

this.removePage = function(page){
    self.formBuilder.pages.destroy(page);
    var newDeletion = new Deletion();
    newDeletion.element(page);
    self.deletions.push(newDeletion);
}

this.removeFormElement = function(element){
    self.formElements.destroy(element);
    var newDeletion = new Deletion();
    newDeletion.element(element);
    builder.deletions.push(newDeletion);
}

var Deletion = function(){
    var self = this;
    this.element = ko.observable();
};

さまざまなタイプの要素をDeletionsobservableArrayに追加できることに注意してください。'unremove'関数で行う必要があるのは、'destroy'フラグをfalseに設定することだけです。しかし、私はそれを機能させることができません:

this.unremovePage = function(deletion){
    deletion.element()._destroy(false);
}

これを行う正しい方法は何ですか?

編集

ネストされたFormElementsでこれを機能させることができません。構造は次のとおりです。私のメインのViewModelは「FormBuilder」と呼ばれます。FormBuilderには複数のページ(ViewModel自体)があり、各ページには複数のFormElementがあります(上記のコードスニペットを参照)。

これらのFormElementを「元に戻す」ことはできますが、強制的に更新する方法がわかりません。

this.unremove = function(deletion){
    //console.log(deletion.element);
    deletion.element()._destroy = false;
    self.deletions.remove(deletion);
    self.formBuilder.pages.valueHasMutated(); // works
    deletion.element().valueHasMutated(); // this doesn't work 
    self.formBuilder.pages.indexOf(deletion.element()).valueHasMutated(); // neither does this
    self.deletions.valueHasMutated(); // works
};
  • FormBuilderはメインのViewModelです。
  • FormBuilderにはPagesと呼ばれるobservableArrayがあり、各PageはViewModelです。
  • 各ページにはFormElementsと呼ばれるobservableArrayがあり、各FormElementはViewModelです。
  • FormBuilderにはDeletionsと呼ばれるobservableArrayがあり、各DeletionはViewModelであり、各DeletionにはPageまたはFormElementのいずれかの要素が含まれています。

問題:関数「unremove」を使用して、要素(PageまたはFormElement)の「destroy」プロパティをfalseに設定します。ご覧のとおり、ページで「valueHasUpdated」と呼びます。しかし、個々のページに含まれているobservableArrayでそれを呼び出すにはどうすればよいですか?formElements

4

1 に答える 1

7

_destroy観察可能ではありません。したがって、何ができるか_destroyをfalseに設定してからvalueHasMutated、observableArrayを呼び出すと、サブスクライバー(UI)は更新が必要になる可能性があることを認識できます。

だから、あなたはしたいと思うでしょうdeletion.element()._destroy = false;そしてそれからself.deletions.valueHasMutated()

于 2012-09-17T13:25:06.493 に答える