Backbone.js和Browserify - 多次需要相同的模块

时间:2015-04-21 21:23:06

标签: javascript backbone.js browserify

我目前正在开发一个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,是否有更聪明的解决方案?谢谢!

1 个答案:

答案 0 :(得分:1)

致电时

var Router = require('./Router.js');

Browserify实际上是跟踪Router的单个实例,因此每次都不是新实例。将其视为参考或使用声明。有关详细信息,请参阅this SO post

但是对于router = new Router();,您遇到了router被实例化的问题。我建议您在Router.js导出router的实例。