Knockout.js 使用未命名数组并添加isDirty属性的剔除自动映射

Knockout.js 使用未命名数组并添加isDirty属性的剔除自动映射,knockout.js,knockout-mapping-plugin,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属

我正在使用淘汰映射插件。 我得到的简化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属性时遇到问题。 我开始怀疑我是不是走错了路

这是一个

更新


这是一个基于以下答案的工作。

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

您已将映射定义为

var mappingOptions = {
    Items: {
        create: function (mappingoptions) {            
            ...
        }
    }
};
因此,ko.mapping正在查找数据对象的一个名为“Items”的数组属性,它将对其中的每个项运行“create”方法。但是,数据对象“jsn”没有名为“Items”的集合

如果您将jsondata更改为:

var jsondata = { 
    Items : [
        {"ID":1,"Title":"Title 1"},
        {"ID":2,"Title":"Title 2"}
    ]
}
您应该看到“create”方法被执行,并且您的isDirty标志将被添加

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


希望这有帮助

谢谢,就是这样。
var jsondata = { 
    Items : [
        {"ID":1,"Title":"Title 1"},
        {"ID":2,"Title":"Title 2"}
    ]
}
var mappingOptions = {
    create: function (mappingoptions) {            
        ...        
    }
};