Javascript 如何与RequireJS共享全局变量/对象

Javascript 如何与RequireJS共享全局变量/对象,javascript,backbone.js,requirejs,backbone-views,Javascript,Backbone.js,Requirejs,Backbone Views,我想在main.js中设置一个变量或对象,然后我可以从任何主干视图引用它 我考虑过使用localStorage,但是数据是动态的,而且有点敏感,所以我不希望将其存储在localStorage中,因为用户可以很容易地对其进行操作。既然您说的是“main.js”,我想您可能会混淆RequireJS和Backbone.js。RequireJS不是主干网的一部分。它是一个AMD模块加载器,碰巧经常用于主干项目 看起来您需要一个RequireJS模块,如: define(function (require

我想在
main.js
中设置一个变量或对象,然后我可以从任何主干视图引用它

我考虑过使用localStorage,但是数据是动态的,而且有点敏感,所以我不希望将其存储在localStorage中,因为用户可以很容易地对其进行操作。

既然您说的是“main.js”,我想您可能会混淆RequireJS和Backbone.js。RequireJS不是主干网的一部分。它是一个AMD模块加载器,碰巧经常用于主干项目

看起来您需要一个RequireJS模块,如:

define(function (require) {
  var someData;
  var singleton = function () {
    return {
        getMyData = function(){},
        setMyData = function(data){},
    };
  };
  return singleton();
});
注:上面的代码可以是object literal,适当构造函数的实例,es6类等等。我只是举了个例子。

为了在我的应用程序中实现我所称的服务,借用了。我有一些服务,比如
i18n
,它只是i18next的一个实例

define(['underscore', 'backbone', 'color'], function(_, Backbone, Color) {

    var State = Backbone.Model.extend({

        setBrandColor: function(hexColor, options) {
            return this.set({ color: new Color(hexColor) }, options);
        },

        getBrandColor: function() {
            return this.get('color');
        },
    });

    return new State(); // return a new instance instead of the constructor.
});
与您一样,我希望管理与应用程序相关的某些数据,这些数据可以在任何地方共享,而无需将其放入
窗口
对象

我提出了一个
AppState
服务,它只是一个主干模型实例

define(['underscore', 'backbone', 'color'], function(_, Backbone, Color) {

    var State = Backbone.Model.extend({

        setBrandColor: function(hexColor, options) {
            return this.set({ color: new Color(hexColor) }, options);
        },

        getBrandColor: function() {
            return this.get('color');
        },
    });

    return new State(); // return a new instance instead of the constructor.
});
主干模型的酷之处在于,应用程序中的任何东西都可以监听其事件。这是从React获得的灵感

this.listenTo(AppState, 'change:color', this.onBrandColorChange);
请注意,我更喜欢对服务使用PascalCase,尽管它们是实例,但它们与其他语言中的静态类型密切相关


这样,当应用程序状态改变时,应用程序的其他部分可能会也可能不会做出相应的反应。如果没有这些事件,应用程序将需要更加耦合,这是不可取的。

可能有点困惑。我正在backbonejs应用程序中使用requireJS。我需要以某种方式在main.js中注册一个变量或对象,然后我可以从backbonejs视图中引用该变量或对象,该视图是一个单独的js文件(在r.js之前)。您可以在main.js中要求您的singleton模块,并为其设置任何值。然后,您可以通过在主干视图的模块中要求/添加此模块作为依赖项来检索该值。在其他工作中,将数据存储在requirejs模块中