ExtJS4 Singleton不是单身?

时间:2014-02-03 17:14:27

标签: extjs singleton

在我的app.js文件中,我有一个名为createPermissions的函数,它通过一个名为MyAccess的Ext.store,最终创建一个名为UserPermissions的单例,其中包含用户拥有的组件列表访问。

这是我最初的概念验证代码,我决定在回家的路上,我将无法使用单例,因为当每个用户启动应用程序时,它会覆盖并导致每个人的权限都在查看上次启动应用程序的用户不是我需要的。

以下是代码:

createPermissions: function() {
    var access     = Ext.getStore( 'MyAccess' ),
        components = [];

    access.data.items.forEach( function(permission) {
        components.push( permission.data.id.toLowerCase() );
    });

    Ext.define('UserPermissions', {
        singleton  : true,
        components : components
    });
}

在启动ExtJS应用程序后的控制台中,您可以键入UserPermissions.components,它将输出一组用户有权访问的ID组件(这是预期的)。我有两个同事也启动所有并在我的控制台中执行相同的命令,而我重新跑了我的意外,他们都保持不同,这不是我的预期(但正是我需要的......)

ExtJS是否为每个启动应用程序的用户创建了一个新的应用程序?这是我能想出的唯一解释,为什么每个用户“UserPermission”单例不会真正成为单身,除非ExtJS处理单例的方式与你的日常实现不同。

1 个答案:

答案 0 :(得分:2)

单身只不过是一个全局变量。现在,javascript中的全局变量是什么?

globalVariable = 'foo';

真的意味着:

window.globalVariables = 'foo';

试一试:

globalVariable = 'bar';
globalVariable === window.globalVariable; // true

请注意,我们甚至没有正式指定window.globalVariable ...

所以,做:

Ext.define('UserPermissions', ...);

以后能够以这种方式访问​​它:

UserPermission.components

只是意味着Ext为您创建了一个window.UserPermission变量。

最后,您可能知道window对象代表浏览器选项卡。因此,您可以轻松得出结论,每个浏览器选项卡都会有一个“单例”。据我所知,这就是所谓的单身人士......

ExtJS只是一个客户端库,请记住它没有服务器组件。所以不要指望找到这样强大的功能,如“在3行代码中跨越计算机而不必在它们之间建立连接”^^