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

map a new attribute to an observable array using ko mapping

我正在尝试弄清楚如何使用 ko 映射插件向可观察数组添加附加属性。例如,如果我有这样的数据

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

而我的 I 可以像这样绑定到我的淘汰赛 Observable

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);

但是如果在项目数组中我希望每个项目都有一个附加属性怎么办?比如 editMode: false。我必须对映射做些什么才能实现这一点。我相信它与创建回调有关,但我不太明白。

这是我的 fiddle https://jsfiddle.net/0o89pmju/5/。我不太明白如何在映射上使用创建函数来为项目数组中的每个项目添加值为 false 的附加属性 editMode。

也许有更好的解决办法。

你可以这样调用映射插件:

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:此 link Pluggin Mapping 中的信息来源(使用“创建”自定义对象构造