甚至在使用require之前。js,不需要全局。
只需将当前视图放入路由器属性。
initialize : function() {
this.$page = $('#page');
Backbone.history.start({ pushState: true });
},
showView : function(view) {
if (this.current) this.current.remove();
this.$page.html((this.current = view).render().el);
}
然后,同样的事情也适用于异步需求情况:
showPage : function(pageName) {
if (this.current) this.current.remove();
var view = 'views/pages/' + pageName,
self = this;
require([view], function(Page) {
self.$page.html((self.current = new Page()).render().el);
});
}
但即使这样,我也不想要求每个视图都具有异步
require
是值得的。你只是通过大量的额外请求来减缓你的应用程序。
只需定义每个模块的依赖项。
define([
'jquery',
'backbone',
'views/index',
'views/about'
], function($, Backbone, IndexView, AboutView){
// ...
});
在开发过程中,每次刷新时都会看到大量的请求,但在准备生产时,可以使用
require optimizer
.
还请注意,您可以将模块作用域设置为全局,它只是在模块作用域的根(IIFE或require.js)处声明的局部变量。
(function() {
var currentView;
var Router = Backbone.Router.extend({
// ...snip...
showView: function(view) {
if (currentView) currentView.remove();
this.$page.html((currentView = view).render().el);
}
});
})();