Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在dojo应用程序中,数据模型放在哪里?_Javascript_Dojo - Fatal编程技术网

Javascript 在dojo应用程序中,数据模型放在哪里?

Javascript 在dojo应用程序中,数据模型放在哪里?,javascript,dojo,Javascript,Dojo,我的困境是,dojo文档中建议AMD模块不要设置或读取全局变量。然而,假设您的数据模型包含许多单独的小部件所使用的属性(因此它是一个共享模型),那么期望每个小部件都保存自己的数据模型对象实例是不合理的。那么,您将它放在哪里,以便所有需要获取和设置属性或查看属性更改的小部件都可以这样做呢?您可以使用单音模式 单件减少了对全局变量的需求,尤其是 在JavaScript中很重要,因为它限制了名称空间污染和 名称冲突的相关风险 要在Dojo中实现单音模式,可以创建一个AMD模块,它是单音对象 在下面的示

我的困境是,dojo文档中建议AMD模块不要设置或读取全局变量。然而,假设您的数据模型包含许多单独的小部件所使用的属性(因此它是一个共享模型),那么期望每个小部件都保存自己的数据模型对象实例是不合理的。那么,您将它放在哪里,以便所有需要获取和设置属性或查看属性更改的小部件都可以这样做呢?

您可以使用单音模式

单件减少了对全局变量的需求,尤其是 在JavaScript中很重要,因为它限制了名称空间污染和 名称冲突的相关风险

要在Dojo中实现单音模式,可以创建一个AMD模块,它是单音对象

在下面的示例中,您有一个名为
App
的AMD模块的定义。 “public”属性
data
可以包含表示共享数据的任何对象,因此您可以在作为独立模块的小部件中使用它

函数
init
可用于初始化单音对象并填充属性
数据(例如向服务器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();    
});

_App必须是一个函数?@erotavlas在javascript中,函数是一个一级对象,代码如下_App必须是一个函数。我希望这个答案对你有所帮助。如果您需要更多信息,请告诉我。