8

基本的なデータ属性だけでなく、別のモデル オブジェクトを保持する 1 つまたは 2 つの属性を持つモデルがいくつかあります。

これは大丈夫ですが、今私は電話したいです

myRootModel.toJSON()

そして、toJSON() を呼び出そうとしているモデルの他のモデルでは .toJSON を呼び出さないことに気付きました。

基本属性、サブモデル、コレクションのいずれであっても、バックボーン モデル .toJSON をオーバーライドしてすべてのフィールドを再帰的に処理する方法はありますか? そうでない場合、各モデル/コレクションで toJSON をオーバーライドできますか?

私はバックボーン リレーショナルを認識していますが、そのルートには行きたくありません。フェッチ/保存を使用していません。代わりに、API が応答を返し、それをモデルの解析関数で調整し、単に new MyRootModel(data, {parse:true})。

4

2 に答える 2

16

そのようなことを達成する方法は次のとおりです(別の方法があるかもしれません):

Backbone.Model.prototype.toJSON = function() {
  var json = _.clone(this.attributes);
  for(var attr in json) {
    if((json[attr] instanceof Backbone.Model) || (json[attr] instanceof Backbone.Collection)) {
      json[attr] = json[attr].toJSON();   
    }
  }
  return json;
};

http://jsfiddle.net/2Asjc/

于 2013-06-11T18:11:50.070 に答える
5

Calling JSON.parse(JSON.stringify(model)) parses the model with all the sub-models and sub-collections recursively. Tried on Backbone version 1.2.3.

于 2015-12-23T18:47:08.657 に答える