使用未命名数组进行Knockout自动映射并添加isDirty属性

时间:2013-06-20 20:01:55

标签: knockout.js knockout-mapping-plugin

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

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

为了在我的viewmodel中有一个名为“Items”的属性,我这样指定:

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

我在映射过程中添加isDirty属性时遇到问题。 我开始怀疑自己是不是以错误的方式接近这一点。

这是JsFiddle

更新

根据以下答案,这是一个有效的JsFiddle

1 个答案:

答案 0 :(得分: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) {            
        ...        
    }
};

希望这有帮助!