knockoutjsマッピングプラグイン2.11では、viewmodel(配列要素を含む)がko.mapping.fromJSで更新され、新しい配列要素の長さが古いものより長い場合、ko.mapping.toJSが空の配列項目を生成していました1。ノックアウトマッピングtoJSバグ?空の配列項目
私の最初のデータがマッピングされている:
var initData = {text: 'Some Text',
arr: [{key: 1, value: 'a'},
{key: 2, value: 'b'}]};
は、それから私は、新しいオブジェクトとビューモデルを更新:その後
var newData = {text: 'Changed Text',
arr: [{key: 1, value: 'aa'},
{key: 12, value: 'bb'},
{key: 13, value: 'cc'}]};
私は(ko.mapping.toJSと呼ばれる)、私がことがわかりました3番目の配列アイテムは空のオブジェクトです。 これがバグか何かを逃したかどうかわかりません。私が気付いたもう一つの事は、データを更新するのは初めてだということです。 initDataでビューモデルを更新してからnewDataを再度更新すると、結果は正しいです。 http://jsfiddle.net/gonglei/xgPSq/
編集: 回答ありがとうございました。あなたのソリューションは私の実際のプロジェクトで私の状況に合わないようです。私は、変更されたデータオブジェクトを取得し、それをサーバーに送信する必要があります。ですから、私がko.mapping.toJSと呼んでいる瞬間に、計算された関数にJSON文字列を表示するのではなく、すぐに正しいデータオブジェクトを取得できることを願っています。私はko.mapping.toJSの呼び出しの直後にブレークポイントを置き、データオブジェクトを監視し、3番目の要素は実際には空です。私のサーバーはこの空の要素を受け取りました。スロットルエクステンダーは私に正しいオブジェクトを手に入れましたが、それは非同期的な方法です。とにかく私はバグとして報告しました。開発者がそれを確認できるかどうか、または私に解決策を教えてください。
最高のは、おそらくHTTPSでこのバグを報告することです://github.com/SteveSanderson/knockout.mapping – Niko
データオブジェクトは直ちに正しいので、ko.mapping.toJSは正しいJSONを返します。唯一の問題は、計算結果がGUIの変更を引き起こさないようにko.mapping.toJSだと思います。 –
私はノックアウトマッピングがコレクション内の空のアイテムを埋めるIE 9の問題も経験しました。このエラーは時々発生するだけで、診断が難しくなります。最初と最後の項目([[object object] ,,, [object Object]])のみを設定した4項目のJSON配列がありました。奇妙なのね? –