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

Backbone.js and Browserify - requiring same module multiple times

我目前正在开发一个 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的理解不正确,有没有更巧妙的解决办法?谢谢!

当你打电话时

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

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

但是 router = new Router(); 你 运行 遇到了你的 router 被实例化的问题。我建议在 Router.js 中导出 router.

的一个实例