She*_*ock 4 javascript knockout.js
我在一个名为"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();
};
Run Code Online (Sandbox Code Playgroud)
请注意,可以将不同类型的元素添加到Deletions observableArray中.我需要在'unremove'函数中做的唯一事情就是将'destroy'标志设置为false.但是,我无法让它工作:
this.unremovePage = function(deletion){
deletion.element()._destroy(false);
}
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
编辑
我不能让它适用于嵌套的FormElements.结构是:我的主ViewModel被称为'FormBuilder'.FormBuilder有多个页面(这些是ViewModel本身),每个页面都有多个FormElements(参见上面的代码片段).
我可以"取消删除"那些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
};
Run Code Online (Sandbox Code Playgroud)
问题:我使用函数'unremove'将元素的'destroy'属性(Page或FormElement)设置为false.如您所见,然后我在页面上调用'valueHasUpdated'.但是如何在observableArray上调用formElements单个Page包含的内容?
_destroy不是一个可观察的.因此,您可以将其设置_destroy为false然后调用valueHasMutatedobservableArray,以便任何订阅者(UI)知道它可能需要进行更新.
所以,你想要deletion.element()._destroy = false;然后打电话self.deletions.valueHasMutated().
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |