ページの読み込み時に、JSONデータをこのようなビューモデルに変換しています
var jsonField = '#' + '<% = hdnField.ClientID %>';
jsonModel= {
availables: ko.observableArray([])
};
var valueField = $(jsonField)[0].value;
var arrayGroup = $.parseJSON(valueField);
jsonModel.availables = ko.viewmodel.fromModel(arrayGroup);
var block=$('#availabilitiesBlock')[0];
ko.applyBindings(jsonModel,block);
ページが読み込まれた後、このビュー モデルを更新するために ajax サーバー関数を呼び出しています。
tha ajaxサクセスコールバックでは、私は次のように書いています
var updatedModel = {
availables: ko.observableArray([])
};
updatedModel.availables = ko.viewmodel.fromModel(data.d);
この更新されたモデルでビュー モデルを更新しようとすると、モデル全体が空白になります
私は次の方法を試しました
data.d を oldModel.availables オブザーバブルにプッシュしました。データをプッシュすると、配列オブジェクトはオブザーバブルとして変換されませんが、アイテムは availables 配列に追加されました。最初 (ページの読み込み中) では、オブジェクトは問題なく変換されました。
ビューモデルを直接更新しようとしましたが、この場合、モデル全体が空白になります
ko.viewmodel.updateFromModel(oldModel, updatedModel);
古いモデルの切り取り
更新されたモデルの抜粋
私が言ったように、配列オブジェクトを直接プッシュしたとき (data.d)、オブザーバブルは ajax の前の最初のケースのように自動的に作成されません。
ロジックが同じであるのに、なぜこれが起こっているのですか? オブジェクトを自動的にマッピングするためにhttp://coderenaissance.github.io/knockout.viewmodel/を使用しています。
どんなポインタも役に立ちます