我想在main.js
中設置一個變量或對象,然後我可以從任何骨幹視圖中引用它。如何與RequireJS共享一個全局變量/對象
我考慮過使用localStorage,但數據是動態的並且有點敏感,所以我不想將它存儲在localStorage中,因爲它可以很容易地被用戶操縱。
我想在main.js
中設置一個變量或對象,然後我可以從任何骨幹視圖中引用它。如何與RequireJS共享一個全局變量/對象
我考慮過使用localStorage,但數據是動態的並且有點敏感,所以我不想將它存儲在localStorage中,因爲它可以很容易地被用戶操縱。
既然你說過「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類的什麼。我剛剛舉了一些例子。
@TJ already gave what's needed實現我所說的服務在我的應用程序中,從AngularJS services借用。我有幾個服務,如i18n
這僅僅是一個下一個實例。
和你一樣,我想管理與應用程序相關的某些數據,這些數據可以在任何地方共享,而不必將其放入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的服務,即使他們的情況下,他們密切相關的其他語言的靜態類型。
這樣,當該應用的應用程序狀態的變化,其他部分可以或可以不相應地作出反應。沒有這些事件,應用程序將需要更多的耦合,這是不可取的。
也許有點困惑。我正在使用requireJS和我的backbonejs應用程序。我需要以某種方式在我的main.js中註冊一個變量或對象,然後我可以從backbonejs視圖中引用該視圖,該視圖是一個單獨的js文件(在r.js之前)。 – David
你可以在你的main.js中需要你的singleton模塊,併爲它設置任何值。然後,您可以通過在您的骨幹視圖的模塊中要求/添加此模塊作爲依賴項來檢索該值。在其他作品中,您的數據存儲在requirejs模塊中 –