在IE9中使用淘汰赛(2.1.0)和淘汰赛映射(2.1.2)出现了一些谜。由于某种原因,对象的数组索引变为父对象。例如:
ko.mapping.toJSON(attachments);
在Chrome中生成类似的内容:
{
"UserID": 432,
"Attachments": [{
"AttachmentID": 2,
"OwnerID": 321,
"DisplayName": "sample.pdf",
"Description": "desc",
"PostDate": "2012-06-01T09:24:43.817"
}, {
"AttachmentID": 3,
"OwnerID": 432,
"DisplayName": "sample3.pdf",
"Description": "desc",
"PostDate": "2012-06-05T14:01:00.693"
}, {
"AttachmentID": 4,
"OwnerID": 543,
"DisplayName": "sample2.pdf",
"Description": "desc",
"PostDate": "2012-06-05T14:01:49.18"
}]
}
...但是在IE9中,产生这样的东西:
{
"UserID": 432,
"Attachments": {
"0": {
"AttachmentID": 2,
"OwnerID": 321,
"DisplayName": "sample.pdf",
"Description": "desc",
"PostDate": "2012-06-01T09:24:43.817"
},
"1": {
"AttachmentID": 3,
"OwnerID": 432,
"DisplayName": "sample3.pdf",
"Description": "desc",
"PostDate": "2012-06-05T14:01:00.693"
},
"2": {
"AttachmentID": 4,
"OwnerID": 543,
"DisplayName": "sample2.pdf",
"Description": "desc",
"PostDate": "2012-06-05T14:01:49.18"
}
}
}
这会破坏我的敲除绑定,因为模板期望附件是一阶数组。
有趣的是,json2的stringify在我尝试的每个浏览器中返回第一个输出(这是我期望的)。
之前有没有人见过这种行为?关于如何纠正它的任何想法?
答案 0 :(得分:0)
简短的版本是我找不到问题的答案,但我确实找到了解决方法。它不漂亮。如果我覆盖JSON对象并强制它使用delete window.JSON;
使用JSON3,那么就像这样做一些stringify hocus pocus:
var jsonString = JSON.stringify(objToBind);
var reconstitutedObject = ko.utils.parseJson(jsonString);
...从重构对象创建映射并绑定到重构对象,额外的容器似乎消失了。这告诉我,在数组定义中有一些额外的东西被解释为容器,但在主要项目的内容中嗅探,嗅探网络流量,并试图深入研究服务器如何响应,我'我的空缺。