【问题标题】:Backbone.js and Browserify - requiring same module multiple timesBackbone.js 和 Browserify - 多次需要相同的模块
【发布时间】:2015-04-21 21:23:05
【问题描述】:

我目前正在开发一个 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理解不透吗,有没有更聪明的解决方法?谢谢!

【问题讨论】:

    标签: javascript backbone.js browserify


    【解决方案1】:

    当你打电话时

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

    Browserify 实际上跟踪Router 的单个实例,因此它不是每次都是新实例。将其视为参考或使用语句。详情请见this SO post

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

    【讨论】:

    • 因此,作为其他答案之一,require 的结果是单例。杰出的。谢谢。
    • 不客气。如果可行,那么我建议接受我的回答,以便其他人知道您的问题已解决。
    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多