【问题标题】:map a new attribute to an observable array using ko mapping使用 ko 映射将新属性映射到可观察数组
【发布时间】:2017-11-27 16:01:56
【问题描述】:

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

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

我可以像这样绑定到我的淘汰赛 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);

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

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

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin knockout-3.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使用“create”自定义对象构造

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多