6

Backbone で深いモデルを使用できる手法があるようですが、単一モデルの階層コレクションはどうでしょうか?

わかりやすい例は、カテゴリ ツリーです。したがって、「名前」、「タイプ」、「色」など、いくつかのプロパティを持つカテゴリ モデルを作成できます。

リレーショナル db スタイルの親 ID ではなく、js を使用しているため、データを json として表現したいと考えています。

バックボーンを利用して、ツリー内の単一モデルのインスタンスを含むデータ構造を (おそらくコレクションを拡張することによって) サポートできますか (モデルとサブモデルがすべて同じモデルのインスタンスになるように)?

4

1 に答える 1

8

Backbone-Relationalまたはsupermodel.jsをご覧ください。

これらのプロジェクトは、デフォルトの実装よりも優れた形式のモデルネストを提供します。

次のようなバックボーンモデルをネストします。

var MyModel = Backbone.Model.extend({});
var MySubModel = Backbone.Model.extend({});

var model = new MyModel({submodel: new MySubModel({color: 'blue'})});

そして、toJSONメソッドをオーバーライドします。

// nested models!  Might just override the internal representation of this...
_.extend(Backbone.Model.prototype, {
  // Version of toJSON that traverses nested models
  toJSON: function() {
    var obj = _.clone(this.attributes);
    _.each(_.keys(obj), function(key) {
      if(!_.isUndefined(obj[key]) && !_.isNull(obj[key]) && _.isFunction(obj[key].toJSON)) {
        obj[key] = obj[key].toJSON();
      }
    });
    return obj;
  }
});

_.extend(Backbone.Collection.prototype, {
  // Version of toJSON that traverses nested models
  toJSON: function() {
    return this.map(function(model){ return model.toJSON(); });
  }
});

したがって、モデルをネストすると、JSON表現は正しく表示されます。ただし、モデルのメソッドに注意を払う必要がありparseます。サーバーからJSONを取得する場合、すべてが正しく機能するためには、そこにすべてのサブモデルとコレクションを生成する必要があります。

于 2012-06-20T21:29:44.070 に答える