1

私のルーターでは、初期化メソッドのコードは同じです (コードは 3 回繰り返されます!)。

私は 3 つのルーターを持っているので、コードをリファクタリング (名前の変更など) したい場合は、3 つの別々のファイルにジャンプして、各ファイルに変更を適用する必要があります。

コードは次のとおりです。

initialize: =>
  # http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
  @contentView = new Backbone.AppView(".js-content")
  @searchView = new Backbone.AppView(".js-searchbox")
  @sidebarView = new Backbone.AppView(".js-sidebar")

このコードを DRY するためのテクニックはありますか?

ある種のスーパークラス?

私はコーヒースクリプトを使用しています。

4

2 に答える 2

2

必要なビューの初期化を行う抽象ルーターを作成する必要があり、特定のルーターがそれを拡張する必要があります。

var BaseRouter = Backbone.Router.extend({
  initialize : function(){
    console.log('Native Router!');
    this.contentView = new Backbone.AppView(".js-content");
    this.searchView = new Backbone.AppView(".js-searchbox");
    this.sidebarView = new Backbone.AppView(".js-sidebar");
    }
});
var RouterOne = BaseRouter.extend({
  initialize : function(){
    BaseRouter.prototype.initialize.call(this);
    //specific stuff
  }
});
var RouterTwo = BaseRouter.extend({
  initialize : function(){
    BaseRouter.prototype.initialize.call(this);
    //specific stuff
  }
});

var router1 = new RouterOne();
var router2 = new RouterTwo();
于 2012-08-27T14:30:53.003 に答える
1

ここでインスタンス化する DOM の部分はすべて、「親ビュー」の「子ビュー」と見なすことができるようです。このため、@pageView = new BB.AppView(...) をインスタンス化し、@pageView の render() メソッドでこれら 3 つの「子クラス」をインスタンス化してみませんか?

于 2012-08-27T14:31:26.880 に答える