我目前正在开发一个Backbone JS应用程序,我第一次开始使用Browserify。但当然我遇到了一些问题。这是其中之一。
我有以下模块/js/views/Home.js
。
var $ = require('jquery'),
_ = require('underscore'),
Backbone = require('backbone');
Backbone.$ = $;
module.exports = Backbone.View.extend({
el: '#view',
template: _.template($('#home-template').html()),
initialize: function () {
this.render();
},
render: function () {
this.$el.html(this.template());
},
events: {
'click button': 'searchSubmit'
},
searchSubmit: function () {
// this should be where the magic happens
}
});
调用searchSubmit
方法后,我想执行router.navigate('search')
之类的操作。
我的问题:如果我有一个路由器模块Router.js
,那么每次我想要一些路由器功能时,是否需要在我的所有模块中创建它的新实例?
var Router = require('./Router.js'),
router = new Router();
当Browserify将它们捆绑在一起时,在每个视图中创建一个新路由器似乎不合逻辑。
是不是我不理解Browserify,是否有更聪明的解决方案?谢谢!
答案 0 :(得分:1)
致电时
var Router = require('./Router.js');
Browserify实际上是跟踪Router
的单个实例,因此每次都不是新实例。将其视为参考或使用声明。有关详细信息,请参阅this SO post。
但是对于router = new Router();
,您遇到了router
被实例化的问题。我建议您在Router.js
导出router
的实例。