9

私は knockoutjs を使用しており、JSON データから ViewModel インスタンスを作成しようとしています。knockoutjs のドキュメントによると、次のステートメントを使用できます。

ko.mapping.fromJS(data, viewModel);

これが私のコードです:

var pledgeVM=function(){            
      this.name=ko.observable();
      this.Assets=ko.observableArray([]);
      this.StartEdit=function(assetModel){
      };
 };
        pledge = {"name":"Moses","Assets":[{"CityId":13,"commetns":null},{"CityId":14,"commetns":null}]};
        var pledgeVMinstance=new pledgeVM();
        ko.mapping.fromJS(pledge,pledgeVMinstance);

何らかの理由pledgeVMinstance.name()で、ステートメントを次のように変更しない限り、データが入力されません (定義されていません)。

ko.mapping.fromJS(pledge,{},pledgeVMinstance);

たぶん誰かが私に物事がそのようになる理由を説明できるでしょう。

4

2 に答える 2

23

ko.mapping.fromJS次の署名があるために発生しました。

ko.mapping.fromJS(data, mappingOptions, viewModel);

どこでdata- はあなたのjsonデータですmappingOptions- はあなたの日付をマッピングする方法をプラグインにマッピングするための指示ですviewModel- はマッピングされたデータを保存するオブジェクトです。

ko.mapping.fromJS(data)- この構文はビュー モデルを作成します。

ko.mapping.fromJS(data, mappingOptions) - これにより、特定のオプションを使用してビュー モデルが作成されます。

ko.mapping.fromJS(data, {}, viewModel)-そして、これはオプションをマッピングせずにデータを変換し、モデルを表示します。

理解を深めるためにドキュメントを読んでください: http://knockoutjs.com/documentation/plugins-mapping.html

于 2013-01-15T12:01:50.653 に答える
5

Knockout の Web サイトのドキュメントを読んだ結果、次のように呼び出していると思います。

var viewModel = ko.mapping.fromJS(data);

ViewModel を自動的に作成します。これは、マッピング プラグインが監視可能なプロパティを持つ ViewModel を作成するため、自分で ViewModel を宣言する必要がないことを意味します。

これを初めて呼び出した後、次を使用できます

ko.mapping.fromJS(data, viewModel);

ViewModel データを更新するには、たとえば、ajax リクエストを介してさらにデータを読み込んだ後などです。

これを修正する解決策は次のとおりです。

var pledge = {"name":"Moses","Assets":[{"CityId":13,"commetns":null},{"CityId":14,"commetns":null}]};

var pledgeVMinstance = ko.mapping.fromJS(pledge);
于 2013-01-15T11:51:58.173 に答える