我的困境是在dojo文档中建议AMD模块不应设置或读取全局变量。但是,假设您的数据模型包含许多单独的小部件使用的属性(因此它是共享模型),期望每个小部件保存其自己的数据模型对象实例是不合理的。那么你把它放在哪里,以便所有需要获取和设置属性或观察属性更改的小部件都可以这样做?
答案 0 :(得分:5)
您可以使用Singletone模式。
单身人士减少了对全局变量的需求,尤其如此 在JavaScript中很重要,因为它限制了命名空间污染和 相关的名称冲突风险。 Source
要在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();
});