【问题标题】:How to add a new anonymous items using knockout mapping plugin如何使用淘汰映射插件添加新的匿名项目
【发布时间】:2013-10-14 08:24:20
【问题描述】:

当我尝试将新项目添加到我的数组中时,我似乎无法让 Knockout 映射插件执行(项目的)“创建”方法。 它似乎在从 json 初始创建时执行,而不是在添加新项目时执行。

这是一个非常简化的jsFiddle

注意:我查看了similar questions,但它们都引用了我没有的静态对象。

初始 JSON

var json = {    
  "Items": [{
        "ItemID": 1,
        "ItemDate": "2000-01-02T00:00:00Z",
        "Amount": 50
    },{
        "ItemID": 2,
        "ItemDate": "2000-01-02T00:00:00Z",
        "Amount": 100
    }]
};

映射选项

 var mappingOptions = {    
  "Items": {
    create: function (mappingoptions) {
        var data = mappingoptions.data;

        data = data || {
            "ItemID": ko.observable(0),                        
            "ItemDate": ko.observable(currentDate),                        
            "Amount": ko.observable(new Date())
        };

        var result = ko.mapping.fromJS(data);                                     
        return result;            
    }
  }
};

查看模型(带添加方法)

MyApp.Batch.ViewModel = function (jsonBatch) {
  //Works Great
  var model = ko.mapping.fromJS(jsonBatch, mappingOptions); 

  //Doesn't Work
  model.addItem = function() {        
    // TRYING TO ADD a new Empty Item USING THE AUTO MAPPER        
    var newItem; 
    model.Items.push(ko.mapping.fromJS(newItem, mappingOptions))        
  };    

  return model;
};

【问题讨论】:

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


    【解决方案1】:

    映射插件的目标(顾名思义)是在对象图之间进行映射,而不是为拉伸创建新对象。所以它没有提供任何可以在这个用例中帮助你的功能......

    但是您的 Items 创建函数已经处理了空项目的情况,因此您可以在您的 addItem 方法中直接调用此函数:

    model.addItem = function() {
        model.Items.push(mappingOptions.Items.create({}));
    };  
    

    演示JSFIddle.

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2012-04-13
      • 2015-06-07
      • 1970-01-01
      相关资源
      最近更新 更多