2016-08-18 27 views
3

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

回答

5

您可以使用Singletone模式。

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

要在Dojo中实现Singletone模式,您可以创建一个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();  
}); 
+0

_App已经是一个功能? – erotavlas

+0

@erotavlas在javascript中,函数是第一个类对象,下面的代码_App必须是一个函数。我希望这个答案能帮助你。如果您需要更多信息,请让我知道。 – GibboK

相关问题