使用ko.viewmodel插件时,如何在取消映射时删除使用extend选项添加的observable?
给出这个例子:
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时如何排除此扩展属性?我想依赖插件的默认映射来模拟模型中的每个其他属性(在另一种情况下,模型可能更复杂) - 我只需要在viewmodel中有这个额外的observable。
答案 0 :(得分:0)
我找到了我需要做的事情。您可以传递一个包含“map”和“unmap”属性的对象,而不是为每个“扩展”规则定义一个函数,以定义所需的额外映射和取消映射(但仍然使用其他所有内容的默认映射)。在取消映射期间,您可以手动删除额外属性,以便在调用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!");
}
}
}
});