【问题标题】:'Undestroy' an object in Knockout在 Knockout 中“破坏”一个对象
【发布时间】:2012-09-19 17:55:33
【问题描述】:

我在名为“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 有多个 Pages(它们本身就是 ViewModel),每个 Page 有多个 FormElements(参见上面的代码 sn-p)。

我可以“取消删除”那些 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”。 但是如何在单个页面包含的 observableArray formElements 上调用它?

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

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

    所以,你会想deletion.element()._destroy = false;,然后打电话给self.deletions.valueHasMutated()

    【讨论】:

    • 你能再看看这个吗?我更新了我的问题。
    • 你能在 jsFiddle 里放些东西吗?
    • 目前我无法在 jsFiddle 上进行任何工作...我必须删除太多代码...您在寻找什么?也许我可以通过更新代码sn-p来给我一个更好的印象。
    • 那么,unremovePage 是在页面还是 formElement 上调用?什么是蓝图?只是不确定您上一个代码 sn-p 的上下文。
    • 我有点歪曲了sn-p。我重命名了东西以隐藏实际情况,但因此没有这样做。我更新了代码。
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多