0

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"
    }
    }
}

テンプレートは添付ファイルが1次配列であることを想定しているため、これによりノックアウトバインディングが壊れます。

興味深いことに、json2のstringifyは、試したすべてのブラウザーで最初の出力(これは私が期待するものです)を返します。

誰かが以前にこの振る舞いを見たことがありますか?それを修正する方法について何かアイデアはありますか?

4

1 に答える 1

0

短いバージョンでは、問題の答えが見つかりませんでしたが、回避策は見つかりました。かわいくないです。JSONオブジェクトをオーバーライドし、を使用してJSON3を使用するように強制する場合delete window.JSON;は、次のようにいくつかのstringifyhocuspocusを実行します。

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

...再構成されたオブジェクトからマッピングを作成し、再構成されたオブジェクトにバインドすると、余分なコンテナーがなくなったようです。これは、コンテナーとして解釈されている配列定義に何か余分なものがあることを示唆していますが、メインプロジェクトの内臓を調べ、ネットワークトラフィックをスニッフィングし、サーバーの応答方法をドリルダウンしようとした後、私は' mが不足しています。

于 2012-06-11T23:33:42.943 に答える