使用ko映射将新属性映射到可观察数组

时间:2017-06-24 02:31:32

标签: knockout.js knockout-mapping-plugin knockout-3.0

我试图找出如何使用ko映射插件向可观察数组添加其他属性。所以,例如,如果我有这样的数据

var items = [{
  foo1: 'bar1',
  foo2: 'bar2',
  foo3: 'bar3'
}, {
  foo1: 'bar4',
  foo2: 'bar5',
  foo3: 'bar6'
}];

我可以像这样绑定我的淘汰观察

function viewModel() {
  var self = this;
  this.items = ko.observableArray('');
}


var vm = new viewModel();


(function($) {
  ko.applyBindings(vm); //bind the knockout model
  ko.mapping.fromJS(items, {}, vm.items); // map the data to the
})(jQuery);

但是如果在items数组中我希望每个项目都有一个额外的属性。例如editMode:false。我需要做些什么才能实现这一目标。我认为它与创建回调有关,但我无法弄明白。

这是我的小提琴https://jsfiddle.net/0o89pmju/5/。我无法弄清楚如何在映射上使用create函数,为项目数组中的每个项目添加值为false的editMode的附加属性。

1 个答案:

答案 0 :(得分:1)

也许有更好的解决方案。

您可以通过这种方式调用映射:

ko.mapping.fromJS(items, mapping,vm.items);

mapping是一个具有create函数的对象:

  var mapping = {
    create: function(options) {
      return new dummyModel(options.data);
    }
  } 

dummyModel是一个临时对象,而不是包含您要添加的新属性以及来自插件的属性:

  var dummyModel = function(data) {
      ko.mapping.fromJS(data, {}, this);

      // New Properties
            this.editMode = ko.observable(false)
  }   

以下是fiddle

希望这有帮助。

PD:此链接中的信息来源Pluggin Mapping使用“创建”自定义对象构建