如何使用 ko.viewmodel 插件删除由 "extend" 选项添加的挖空可观察量



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

最新更新