0

私は最近バックボーンの学習を開始し、バックボーンモデルでモデル属性をグループ化する最良の方法は何でしょうか?モデルの属性のサブセットを処理する特殊なビューを持つことを考えています。

たとえば、車のモデルがあり、エンジンに関するすべての情報をグループ化して、これらの属性をビューに渡すことができるようにしたい場合はどうでしょうか。何かのようなものcar.engine_info

Car = Backbone.Model.extend({
    initialize: function() {
        this.engine_info = this._set_engine_info();
    }
    _set_engine_info: function() {
        return {displacement:this.get('displacement'), horsepower: this.get('horsepower')};
}
4

1 に答える 1

3

個別のデータセットを返すのではなく、複数のモデルを作成することを検討する必要があります。そのデータには、イベントの処理と更新のためのバックボーンの力がありません。プロパティと値だけを持つ新しいオブジェクトを作成しています。

代わりに、各コンポーネントのモデルを作成してください

車には-エンジン、機能などがあります。

Engine = Backbone.Model.extend({
  defaults: {
      cylinders: 4,
      horsepower: 180
  }
});

Features = Backbone.Model.extend({
    defaults: {
      powerwindows: true,
      airconditioning: true
    }
});

次に、コンストラクターをオーバーライドして、機能セットを車のモデルにミックスインします

Car = Backbone.Model.extend({
    defaults: function () {
       return {
         engine: new Engine(),
         features: new Features()
       };
    },
    constructor: function ( attrs ) {
        attrs || ( attrs = {} );
        if ( attrs.engine ) {
            attrs.engine = new Engine( attrs.engine );
        } 
        // etc
        Backbone.Model.prototype.constructor.call( this, attrs );
    }
});

もう1つのオプションは、車を作成し、機能を追加するいくつかのデコレータ関数を作成することですが、率直に言って、リストされている方法を好みます。これで、個別のコンポーネントに独自の変更をリッスンさせることができます

var car = new Car({
    engine: { // props },
    features: { //props }
});

car.get( 'features' ).on( 'change:powerwindows', // some function, this );

これらすべての背後にある真の力は、車の全体的な機能セットの責任を分離することです。車はすべての部品について心配する必要はありません。エンジンにエンジンのことを心配させ、機能に機能のことを心配させます。

于 2012-06-21T02:29:00.093 に答える