我想在main.js
中设置变量或对象,然后我可以从任何骨干视图中引用它。
我考虑使用localStorage,但是数据是动态的并且有点敏感,所以我不希望它存储在localStorage中,因为它可以很容易地由用户操作。
答案 0 :(得分:1)
既然你说过" main.js"我认为你在RequireJS和Backbone.js之间感到困惑。 RequireJS不是Backbone的一部分。它是一个AMD模块加载器,它恰好与骨干项目一起使用。
看起来你需要一个RequireJS模块,如:
define(function (require) {
var someData;
var singleton = function () {
return {
getMyData = function(){},
setMyData = function(data){},
};
};
return singleton();
});
P.S:上面的代码可以成为对象文字,一个正确的构造函数的实例,es6类的任何东西。我刚发布了一些例子。
答案 1 :(得分:0)
@TJ already gave what's needed在我的应用中实现我称之为服务的内容,借鉴AngularJS services。我有几个服务,比如i18n
,它只是一个i18next实例。
与您一样,我希望管理与应用程序相关的某些数据,这些数据可以在任何地方共享,而不会将其放在window
对象中。
我想出了一个AppState
服务,它只是一个Backbone模型实例。
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.
});
Backbone模型的优点是应用程序中的任何内容都可以监听其事件。这是受到React的启发。
this.listenTo(AppState, 'change:color', this.onBrandColorChange);
请注意,我更喜欢将PascalCase用于服务,即使它们是实例,它们与其他语言的静态类型密切相关。
这样,当应用状态发生变化时,应用的其他部分可能会或可能不会做出相应的反应。没有事件,应用程序需要更多耦合,这是不可取的。