knockout.mapping,IE9和序列化

时间:2012-06-05 21:54:13

标签: knockout.js knockout-mapping-plugin

在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在我尝试的每个浏览器中返回第一个输出(这是我期望的)。

之前有没有人见过这种行为?关于如何纠正它的任何想法?

1 个答案:

答案 0 :(得分:0)

简短的版本是我找不到问题的答案,但我确实找到了解决方法。它不漂亮。如果我覆盖JSON对象并强制它使用delete window.JSON;使用JSON3,那么就像这样做一些stringify hocus pocus:

var jsonString = JSON.stringify(objToBind);
var reconstitutedObject = ko.utils.parseJson(jsonString);

...从重构对象创建映射并绑定到重构对象,额外的容器似乎消失了。这告诉我,在数组定义中有一些额外的东西被解释为容器,但在主要项目的内容中嗅探,嗅探网络流量,并试图深入研究服务器如何响应,我'我的空缺。