首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExtJS4单例不是单例?

ExtJS4单例不是单例?
EN

Stack Overflow用户
提问于 2014-02-04 01:14:27
回答 1查看 117关注 0票数 1

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

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

代码如下:

代码语言:javascript
复制
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数组(这是预期的)。当我重新运行我的命令时,我让两个同事在他们的控制台上启动all also并执行相同的命令,令我惊讶的是,他们都保持不同,这不是我所期望的(但正是我需要的……)

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

EN

回答 1

Stack Overflow用户

发布于 2014-02-04 05:44:40

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

代码语言:javascript
复制
globalVariable = 'foo';

真正的意思:

代码语言:javascript
复制
window.globalVariables = 'foo';

试试看:

代码语言:javascript
复制
globalVariable = 'bar';
globalVariable === window.globalVariable; // true

请注意,我们甚至还没有正式分配window.globalVariable...

因此,请执行以下操作:

代码语言:javascript
复制
Ext.define('UserPermissions', ...);

后来可以这样访问它:

代码语言:javascript
复制
UserPermission.components

这意味着Ext已经为您创建了一个window.UserPermission变量。

最后,您可能知道window对象表示浏览器选项卡。因此,您可以很容易地得出结论,即每个浏览器选项卡都有一个"singleton“。据我所知,在任何语言中,这就是所谓的单例...

ExtJS只是一个客户端库,记住它没有服务器组件。所以,别指望能找到这样强大的功能:“用3行代码在计算机之间传送变量,甚至不需要在它们之间建立连接”^

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21533395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档