在我的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数组(这是预期的)。当我重新运行我的命令时,我让两个同事在他们的控制台上启动all also并执行相同的命令,令我惊讶的是,他们都保持不同,这不是我所期望的(但正是我需要的……)
那么,ExtJS是否会为每个启动应用程序的用户创建一个新的应用程序呢?这是我能想出的唯一解释,为什么每个用户的"UserPermission“单例都不是真正的单例,除非ExtJS处理单例的方式与您的日常实现不同。
发布于 2014-02-04 05:44:40
单例只不过是一个全局变量。现在,javascript中的全局变量是什么?
globalVariable = 'foo';真正的意思:
window.globalVariables = 'foo';试试看:
globalVariable = 'bar';
globalVariable === window.globalVariable; // true请注意,我们甚至还没有正式分配window.globalVariable...
因此,请执行以下操作:
Ext.define('UserPermissions', ...);后来可以这样访问它:
UserPermission.components这意味着Ext已经为您创建了一个window.UserPermission变量。
最后,您可能知道window对象表示浏览器选项卡。因此,您可以很容易地得出结论,即每个浏览器选项卡都有一个"singleton“。据我所知,在任何语言中,这就是所谓的单例...
ExtJS只是一个客户端库,记住它没有服务器组件。所以,别指望能找到这样强大的功能:“用3行代码在计算机之间传送变量,甚至不需要在它们之间建立连接”^
https://stackoverflow.com/questions/21533395
复制相似问题