我必须在 Backbone.js 中制作带有十几个内部页面的单页应用程序。
我决定这样做:每个页面都与Router对象中的适当功能相匹配,并由几个视图组成,它们代表页面的特殊元素。
就目前而言,我只制作了两个页面,但代码中已经一团糟——这些页面甚至内部视图几乎完全不同,有许多共同的元素,例如事件处理程序和另一个内部函数。
所以,它现在的样子(简要地):
var AppRouter = Backbone.Router.extend({
routes: {
'': 'main',
'user/:username': 'account'
},
main: function() {
new MainView();
},
account: function(username) {
new AccountTopView();
new AccountMiddleView();
}
});
var LinkEvents = {
'click a': 'navigate'
};
var navigate = function(event) {
event.preventDefault();
var link = event.currentTarget;
var url = link.href;
url = RemoveBaseUrl(url);
app.navigate(url, {trigger: true});
}
var AccountMiddleView = ModalView.extend({
template: _.template($('#tpl-account-middle').html()),
events: _.extend(
{},
LinkEvents
),
render: function() {
this.$el.html(
this.template(
)
);
return this;
},
navigate: navigate
});
var AccountTopView = ModalHatView.extend({
template: _.template($('#tpl-account-top').html()),
events: _.extend(
{},
LinkEvents
),
render: function() {
this.$el.html(
this.template(
)
);
return this;
},
navigate: navigate
});
真正的代码要大得多,因为已经有很多事件了。有没有办法优化这种结构?也许还有其他建议?