【问题标题】:Knockout auto mapping with unnamed array and adding an isDirty property具有未命名数组并添加 isDirty 属性的淘汰赛自动映射
【发布时间】:2013-06-20 20:01:54
【问题描述】:

我正在使用淘汰赛映射插件。 我得到的简化 json 是一个未命名数组的形式。

[
 {"ID":1,"Title":"Title 1"},
 {"ID":2,"Title":"Title 2"},
 {"ID":3,"Title":"Title 3"}
]

为了在我的视图模型中有一个名为“Items”的属性,我这样分配:

var model = { Items: ko.mapping.fromJS(jsondata, mappingOptions) }  

我在映射过程中添加 isDirty 属性时遇到问题。 我开始怀疑我是不是走错了路。

这是JsFiddle

更新

这是基于以下答案的有效JsFiddle

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    您在小提琴中看到的问题是您的映射的“创建”方法没有被调用。

    您已将映射定义为

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

    所以 ko.mapping 正在寻找名为“Items”的数据对象的数组属性,它将在每个项目上运行“create”方法。但是,您的数据对象“jsn”没有名为“Items”的集合。

      var jsondata = [
        {"ID":1,"Title":"Title 1"},
        {"ID":2,"Title":"Title 2"}
      ]
    

    如果您将 jsondata 更改为:

    var jsondata = { 
        Items : [
            {"ID":1,"Title":"Title 1"},
            {"ID":2,"Title":"Title 2"}
        ]
    }
    

    您应该看到“create”方法执行并且您的 isDirty 标志将被添加。

    您还可以更改映射以消除“项目”:

    var mappingOptions = {
        create: function (mappingoptions) {            
            ...        
        }
    };
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢,就是这样。
    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多