0

使用ko.viewmodel插件时,如何在取消映射时删除使用扩展选项添加的 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 时如何排除此扩展属性?我想为模型中的每个其他属性依赖插件的默认映射(因为在另一种情况下模型可能更复杂) - 我只需要在视图模型中具有这个额外的可观察性。

4

1 回答 1

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

   }

});
于 2013-07-27T17:15:44.677 回答