2013-07-26 20 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!"); 
      } 
     } 

    } 

});