0

JSON に保存し、必要に応じて再ロードする必要があるモデルがあります。アイデアは、ユーザーがモデルをバスケットまたはデータベースに (JSON 文字列として) 保存してから再ロードできるというものです。JSON を作成して保存するのは簡単ですが、再読み込みは非常に難しいようです。問題は、モデルに Knockout Contacts の例に似たいくつかの複雑なオブジェクトが含まれていることです。

http://knockoutjs.com/examples/contactsEditor.html

JSON を生成し、それを Web サービス経由で .NET オブジェクトに渡すこともできます。

データモデルをロードするためのノックアウトのドキュメントを見てきました:

http://knockoutjs.com/documentation/json-data.html

...そして、「単純な」オブザーバブルを簡単に復元できますが、これらのオブジェクトにもオブザーバブル配列が含まれている複雑なオブジェクトの配列を初期化する方法がわかりません。何か案は?

マッピング プラグインを使用してみましたが、結果の JSON には配列内の情報が含まれていません。

これを行うと JSON が作成され、すべてのデータがそこにあります。

var jsonData = JSON.stringify(ko.toJS(self.contacts), null, 2)

理想的には、これを元に戻すか、少なくともすべてのオブジェクトを 1 つずつ作成する必要があります。

見てくれてありがとう:)

4

1 に答える 1

0

マッピング プラグインが動作するはずです。あなたの状況を正しく理解しているかどうかはわかりませんが、次のようにしてみてください。

ViewModel = function() {
    this.contacts = ko.observableArray();
}

var model = new ViewModel();

ko.applyBindings(model);

var json = '{"contacts":[{"name":"Tom","phones":["00000000","1111111111"]},{"name":"Bill","phones":["222222222","333333333"]},{"name":"Bert","phones":["444444444","55555555"]}]}';

ko.mapping.fromJSON(json, {}, model);

各連絡先の「連絡先」と「電話」の observableArray は、json 文字列から正しく逆シリアル化されます。

http://jsfiddle.net/k4Sth/1/

于 2013-02-07T23:43:16.973 に答える