在Dojo应用程序中,你应该把数据模型放在哪里?

3

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

1个回答

5
你可以使用单例模式。
单例模式减少了全局变量的需求,这在JavaScript中尤为重要,因为它限制了命名空间污染和相关的名称冲突风险。来源
在Dojo中实现单例模式,您可以创建一个AMD模块,它是一个单例对象。
在下面的示例中,您有一个名为App的AMD模块定义。一个“公共”属性data可以包含任何表示您的共享数据的对象,因此您可以在分离的AMD模块中使用它们的小部件中使用它们。
函数init可用于初始化单个对象并填充属性data(例如,向您的服务器API发出请求)。 bootstrap AMD模块(它是您的应用程序的入口点)显示了如何首次加载app AMD模块并初始化它,从那时起,每当您需要在小部件中获取“共享”数据时,您可以像这样请求app和data 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();    
});

应用程序必须是一个函数吗? - erotavlas
在JavaScript中,函数是一等对象,使用以下代码_App必须是一个函数。我希望这个答案能帮助到你。如果你需要更多信息,请告诉我。 - GibboK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接