jquery - 如何使用 knockout 映射插件添加新的匿名项目

标签 jquery knockout.js knockout-mapping-plugin

当我尝试将新项目添加到数组中时,我似乎无法让 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;
};

最佳答案

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

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

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

演示 JSFIddle .

关于jquery - 如何使用 knockout 映射插件添加新的匿名项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19230324/

相关文章:

javascript - 为什么 ASP.NET MVC 无法识别 knockout

带有 knockout 功能的 jQueryUI Spinner 小部件

javascript - 如何在填充有 Json 数据的 knockout View 模型中定义函数

javascript - 在 View 模型构造函数中使用 Knockoutjs 映射插件

javascript - ASP.NET MVC View 中的 knockout 绑定(bind)

jquery - 在折叠的 Bootstrap Accordion 中开始时,选择下拉菜单的宽度接近于零

jquery - 带有链接的 CSS 悬停效果在 IE8 中不起作用

javascript - 尝试使用 Ajax 实现类似功能后出现内部服务器错误 500

jquery - 如何在Grails中使用jQuery

javascript - knockout JS : Template binding Issue in IE8