javascript - 您将数据模型放在 dojo 应用程序的什么位置?

标签 javascript dojo

我的困境是 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 模块并对其进行初始化,无论何时您需要在小部件中获取“共享”数据 您可以像这样请求应用程序和数据 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();    
});

关于javascript - 您将数据模型放在 dojo 应用程序的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025490/

相关文章:

javascript - JavaScript 中的一个错误

JavaScript 和 svg 基础

javascript - Dojo Grid - 在可编辑和不可编辑之间切换

javascript - 如何检查下拉列表是否为只读?

javascript - Dojo 中的“解析器返回未填充的 promise ”错误

javascript - 在 Intern 中加载项目目录外的依赖项

javascript promise setTimeout

php - 防止 div 重新加载

javascript - 有效字符串时区检查的正则表达式

javascript - 查询 dojo 中的商店以查找小于给定数字的数字