使用ko.viewmodel插件时,如何在取消映射时删除使用扩展选项添加的可观察对象?
举个例子:
var model = { name: "test", location: "someplace", items : ["apple","orange"] }
var viewmodel = ko.viewmodel.fromModel(model, {
extend: {
"{root}": function(stuff){
stuff.selectedItem = ko.observable("apple");
},
"{root}.items[i]": function(item){
item.sayHello = function(){
alert("hello!");
}
}
}
});
var output = ko.viewmodel.toModel(viewmodel);
输出对象包含一个我不想要的"selectedItem"属性。使用ko.viewmodel时,如何排除此扩展属性?我想依赖插件对模型中其他所有属性的默认映射(因为在另一种情况下,模型可能更复杂)——我只需要在视图模型中有这个额外的可观察性。
我计算出了我需要做的事情。与其为每个"扩展"规则定义一个函数,不如传递一个包含"映射"one_answers"取消映射"属性的对象来定义所需的额外映射和取消映射(但仍对其他所有内容使用默认映射)。在此取消映射过程中,您可以手动删除额外的属性,以便在调用ko.viewmodel.toModel时不会显示该属性。
所以在我的例子中,我需要使用:
var viewmodel = ko.viewmodel.fromModel(model, {
extend: {
"{root}": {
map: function(stuff){
stuff.selectedItem = ko.observable("apple");
return stuff;
},
unmap: function(stuff){
delete stuff.selectedItem
return stuff;
}
},
"{root}.items[i]": function(item){
item.sayHello = function(){
alert("hello!");
}
}
}
});