我在名为“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();
};
请注意,可以将不同类型的元素添加到 Deletions observableArray。在“取消删除”功能中,我唯一需要做的就是将“销毁”标志设置为 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;
- 每个Page都有一个名为FormElements的observableArray,每个FormElement都是一个ViewModel;
- FormBuilder 有一个名为 Deletions 的 observableArray,每个 Deletion 都是一个 ViewModel,每个 Deletion 都包含一个元素,可以是 Page 或 FormElement。
问题:我使用函数“unremove”将元素(Page 或 FormElement)的“destroy”属性设置为 false。如您所见,然后我在页面上调用“valueHasUpdated”。但是我如何在formElements
单个页面包含的 observableArray 上调用它?