0

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

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

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

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

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

这是一个JsFiddle

更新

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

4

1 回答 1

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) {            
        ...        
    }
};

希望这可以帮助!

于 2013-06-20T21:05:20.703 回答