2013-07-26 23 views
0

当使用ko.viewmodel插件时,如何在unmapping时删除使用extend选项添加的observable?如何删除使用ko.viewmodel插件时使用“extend”选项添加的挖空观察者

考虑这个例子:

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时排除此扩展属性?我想依赖插件的默认映射模型中的每个其他属性(如在另一种情况下,模型可能更复杂) - 我只需要在视图模型中具有此额外的可观察性。

回答

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!"); 
      } 
     } 

    } 

});