我的困境是在dojo文档中建议AMD模块不应该设置或读取全局变量.但是,假设您的数据模型包含许多单独的小部件使用的属性(因此它是共享模型),期望每个小部件保存其自己的数据模型对象实例是不合理的.那么你把它放在哪里,以便所有需要获取和设置属性或观察属性更改的小部件都可以这样做?
您可以使用Singletone模式.
单身人士减少了对全局变量的需求,这在JavaScript中尤其重要,因为它限制了命名空间污染和名称冲突的相关风险.来源.
要在Dojo中实现Singletone Pattern,您可以创建一个AMD模块,它是一个单音对象.
在以下示例中,您定义了一个名为的AMD模块App."public"属性data可以包含表示共享数据的任何对象,因此您可以在作为独立AMD模块的小部件中使用它.
函数init可用于初始化单音对象和填充属性data(例如向您的Server API发出请求).
bootstrapAMD模块(这是您的应用程序的入口点),显示了如何首次加载appAMD模块并初始化它,从那时起,当您需要获取小部件中的"共享"数据时,您可以请求应用程序和数据,如这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()));
};
});
Run Code Online (Sandbox Code Playgroud)
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();
});
Run Code Online (Sandbox Code Playgroud)