'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