我的困境是dojo文档中建议AMD模块不应该设置或读取全局变量。但是,假设您的数据模型包含许多单独的小部件使用的属性(因此它是一个共享模型),那么期望每个小部件都拥有自己的数据模型对象实例是不合理的。那么,您应该把它放在哪里,以便所有需要获取和设置属性或监视属性更改的小部件都可以这样做呢?
你可以使用Singletone模式。
单例模式减少了对全局变量的需求在JavaScript中很重要,因为它限制了命名空间污染和名称冲突的相关风险。源。
要在Dojo中实现Singletone Pattern,你可以创建一个AMD模块,它是一个单音对象。
在下面的示例中,您有一个名为App
的AMD模块的定义。"公共"属性data
可以包含任何表示共享数据的对象,因此您可以在独立的AMD模块的小部件中使用它。
函数init
可用于初始化单音对象并填充属性data
(例如向您的服务器API发出请求)。
bootstrap
AMD模块(这是你的应用程序的入口点),展示了如何首次加载app
AMD模块并初始化它,从那一点,当你需要在你的小部件内获得"共享"数据时,你可以请求应用程序和数据像这样app().data
;
app.js文件
define([
], function (
) {
'use strict';
var _instance;
function _App() {
}
_App.prototype = {
// data: [public] Object
// Data for your app.
data: null,
init: function () {
// summary:
// Initializes and fetch some data from the server.
}
};
return function _getSingleton() {
// summary:
// Gets singleton object.
return (_instance = (_instance || new _App()));
};
});
bootstrap.js文件
require([
'app'
], function (
app
) {
'use strict';
// module:
// bootstrap
// summary:
// Application bootstrap with the main responsibility to initiate modules (single tones).
// initializes module app
app().init();
});