您将数据模型放在 dojo 应用程序的什么位置?
Where do you place the data model in a dojo application?
我的困境是,dojo 文档中建议 AMD 模块不应设置或读取全局变量。然而,假设您的数据模型包含许多单独的小部件使用的属性(因此它是一个共享模型),期望每个小部件都拥有自己的数据模型对象实例是不合理的。那么你把它放在哪里,以便所有需要获取和设置属性或观察 属性 变化的小部件都可以这样做?
您可以使用单调模式。
Singletons reduce the need for global variables which is particularly
important in JavaScript because it limits namespace pollution and
associated risk of name collisions. Source.
要在 Dojo 中实现单音模式,您可以创建一个 AMD 模块,它是一个单音对象。
在下面的示例中,您定义了一个名为 App
的 AMD 模块。
"public" 属性 data
可以包含代表您的共享数据的任何对象,因此您可以在独立的 AMD 模块的小部件中使用它。
函数init
可用于初始化单音对象并填充属性data
(例如向您的服务器API发出请求)。
bootstrap
AMD 模块(这是您的应用程序的入口点),展示了如何首次加载 app
AMD 模块并对其进行初始化,从那时起您需要获取您的小部件中的 "shared" 数据,您可以像这样请求应用程序和数据 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();
});
我的困境是,dojo 文档中建议 AMD 模块不应设置或读取全局变量。然而,假设您的数据模型包含许多单独的小部件使用的属性(因此它是一个共享模型),期望每个小部件都拥有自己的数据模型对象实例是不合理的。那么你把它放在哪里,以便所有需要获取和设置属性或观察 属性 变化的小部件都可以这样做?
您可以使用单调模式。
Singletons reduce the need for global variables which is particularly important in JavaScript because it limits namespace pollution and associated risk of name collisions. Source.
要在 Dojo 中实现单音模式,您可以创建一个 AMD 模块,它是一个单音对象。
在下面的示例中,您定义了一个名为 App
的 AMD 模块。
"public" 属性 data
可以包含代表您的共享数据的任何对象,因此您可以在独立的 AMD 模块的小部件中使用它。
函数init
可用于初始化单音对象并填充属性data
(例如向您的服务器API发出请求)。
bootstrap
AMD 模块(这是您的应用程序的入口点),展示了如何首次加载 app
AMD 模块并对其进行初始化,从那时起您需要获取您的小部件中的 "shared" 数据,您可以像这样请求应用程序和数据 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();
});