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")

是否有某种技术可以干燥此代码?

某种超类?

我使用咖啡脚本。

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() 方法中继续实例化这三个“子类”?

于 2012-08-27T14:31:26.880 回答