【问题标题】:How to reduce repeated code in Backbone Router如何减少骨干路由器中的重复代码
【发布时间】:2012-08-21 23:17:05
【问题描述】:
在我的路由器初始化方法中具有相同的代码(代码重复了 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")
是否有某种技术可以干燥此代码?
某种超类?
我使用咖啡脚本。
【问题讨论】:
标签:
javascript
inheritance
backbone.js
coffeescript
dry
【解决方案1】:
您需要创建一个抽象路由器来初始化所需的视图,然后您的特定路由器必须扩展它:
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();
【解决方案2】:
看起来您在此处实例化的 DOM 部分都可以被视为“父视图”的“子视图”。凭这个道理,你为什么不实例化@pageView = new BB.AppView(...) 然后在@pageView 的render() 方法中继续实例化这三个“子类”?