knockoutjs マッピング プラグイン 2.11 では、viewmodel (配列要素を含む) が ko.mapping.fromJS で更新され、新しい配列要素の長さが古いものよりも長い場合、ko.mapping.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 番目の配列項目が空のオブジェクトであることがわかりました。これがバグなのか、何かを見逃したのかはわかりません。私が気付いたもう1つのことは、データを初めて更新したときにのみ発生することです。ビュー モデルを initData で更新してから newData で更新すると、結果は正しくなります。http://jsfiddle.net/gonglei/xgPSq/
編集:あなたの答えジェイソンに感謝します。あなたのソリューションは、私の実際のプロジェクトでは私の状況に合わないようです。変更されたデータ オブジェクトを取得してサーバーに送信する必要があります。したがって、ko.mapping.toJS を呼び出した瞬間に、計算された関数で JSON 文字列を表示するだけでなく、正しいデータ オブジェクトをすぐに取得できることを願っています。ko.mapping.toJS の呼び出しの直後にブレーク ポイントを配置し、データ オブジェクトを監視すると、3 番目の要素は実際には空です。そして、私のサーバーはこの空の要素を受け取りました。スロットル エクステンダーは正しいオブジェクトを取得しましたが、非同期の方法です。とにかく、私はそれをバグとして報告しました。開発者がそれを確認できるかどうか、または解決策を教えてください。