【问题标题】:Knockout Mapping Plugin - how to add properties to the default mapping?Knockout Mapping Plugin - 如何将属性添加到默认映射?
【发布时间】:2013-11-26 23:04:29
【问题描述】:

我最初有一个这样的viewModel:

var ObjectViewModel = function (data) {
    var self = this;
    //debugger;
    self.id = data.id;
    self.details = data.details;
    self.children = ko.observableArray(data.children);

    self.deleteChild = function (child) {
        // Pending UI
        // call API here
        // On success, complete
        self.children.remove(child);
    }.bind(self);

};

现在我正在尝试使用映射插件,以便使子数组元素可观察。我已经这样做了:

var ObjectViewModel = ko.mapping.fromJS(data);

但我不确定如何将 deleteChild 方法添加到此。

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    我在这里找到了答案:

    Adding properties to the view model created by using the Knockout JS mapping plugin

    基本上,对于我需要添加的每个附加属性,我都会在 innerModel 上定义一个新属性,如下所示:

    var mapping = {
        create: function(options) {
            var innerModel = ko.mapping.fromJS(options.data);
            innerModel.AdditionalProperty = 'Add Function Here';
            return innerModel;
        }
    };
    

    【讨论】:

      【解决方案2】:

      我以不同的方式完成了这项工作,似乎也很有效。

      function ObjectViewModel(viewModel) {
          var self = this;
      
          // bind the vm to self
          ko.utils.extend(self, viewModel);
      
          self.deleteChild = function (child) {
              // Pending UI
              // call API here
              // On success, complete
              self.children.remove(child);
          }.bind(self);
      };
      
      var model = new ObjectViewModel(ko.mapping.fromJS(data));
      

      【讨论】:

      • 聪明。我喜欢这个答案。
      猜你喜欢
      • 2012-03-05
      • 2015-03-17
      • 2013-02-23
      • 2012-12-03
      • 2017-02-19
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多