Javascript ';不得而知';击倒物

Javascript ';不得而知';击倒物,javascript,knockout.js,Javascript,Knockout.js,我在一个名为“删除”的observableArray中跟踪删除的对象。我在UI中解析该数组以创建“撤消删除”链接,但我无法使其工作。代码非常简单,如下所示: this.removePage = function(page){ self.formBuilder.pages.destroy(page); var newDeletion = new Deletion(); newDeletion.element(page); self.deletions.push(ne

我在一个名为“删除”的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();
};
请注意,可以将不同类型的元素添加到deletitions array中。在“unremove”函数中,我唯一需要做的就是将“destroy”标志设置为false。但是,我不能让它工作:

this.unremovePage = function(deletion){
    deletion.element()._destroy(false);
}
正确的做法是什么

编辑

对于嵌套的FormElements,我无法使其工作。结构是:我的主视图模型称为“FormBuilder”。FormBuilder有多个页面(这些页面本身就是ViewModels),每个页面都有多个FormElements(请参见上面的代码片段)

我可以“取消删除”那些表单元素,但我不知道如何强制刷新它们

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是主要的视图模型
  • FormBuilder有一个名为Pages的observableArray,每个页面都是一个ViewModel
  • 每个页面都有一个称为FormElements的observableArray,每个FormElement都是一个ViewModel
  • FormBuilder有一个名为Deletions的observableArray,每次删除都是一个ViewModel,每次删除都包含一个元素,一个页面或一个FormElement
问题是:
我使用函数“unremove”将元素(Page或FormElement)的“destroy”属性设置为false。如您所见,我随后在第页上调用“ValueHasUpdate”。但是我如何在单个页面包含的observableArray
formElements
上调用它呢?

\u destroy
不是可观察的。因此,您可以做的是将
\u destroy
设置为false,然后在ObservalArray上调用
valueHasMutated
,以便任何订阅者(UI)都知道它可能需要进行更新


因此,您需要
deletion.element()。\u destroy=false
然后调用self.deletions.valueHasMutated()

您能再看一下吗?我更新了我的问题。你能把一些东西放在JSFIDLE中吗?我现在无法在JSFIDLE上得到任何东西。。。我必须去掉太多的代码。。。你在找什么?也许我可以通过更新代码片段给人一个更好的印象。那么,
unremovePage
是在页面上还是在formElement上调用的呢?什么是蓝图?只是不确定上一个代码段的上下文。我有点把代码段重写了。我重新命名了stuff以隐藏实际案例,但没有这样做。我更新了代码。