如何正确获取全局变量?ExtJS全局变量读取为空问题排查
问题分析与解决方案
嘿,我一眼就看出问题出在哪了——你每次调用Ext.widget("AppConstants")其实都是在创建一个全新的组件实例!
在LoginController里,你创建了一个AppConstants实例并设置了变量,但到了App里,你又重新创建了另一个完全独立的AppConstants实例,这个新实例里的GLOBAL_id_user自然是空字符串,两个实例之间没有任何关联。
下面给你几个靠谱的解决方案:
方案1:把AppConstants定义为单例组件
这是最贴合你现有代码结构的方案,只需要在定义AppConstants时加上singleton: true配置,确保整个应用中只有这一个实例:
Ext.define('AppConstants', { extend: 'Ext.Component', singleton: true, // 核心配置:标记为单例 GLOBAL_id_user: '', setGLOBAL_id_user: function(id) { this.GLOBAL_id_user = id; }, getGLOBAL_id_user: function() { return this.GLOBAL_id_user; } });
之后调用时就不需要再用Ext.widget创建实例了,直接通过类名访问:
// LoginController中设置变量 AppConstants.setGLOBAL_id_user(id_user); // App中读取变量 console.log(AppConstants.getGLOBAL_id_user());
方案2:直接挂载到Ext全局命名空间
如果不需要组件的封装逻辑,直接把变量挂在Ext的全局对象下会更简单:
// LoginController里设置 Ext.appGlobal = Ext.appGlobal || {}; Ext.appGlobal.GLOBAL_id_user = id_user; // App里读取 console.log(Ext.appGlobal.GLOBAL_id_user);
方案3:使用Ext状态管理器(支持持久化)
如果你的全局变量需要在页面刷新后依然保留,推荐用Ext内置的Ext.state.Manager,它支持多种存储方式(比如localStorage):
// LoginController里存储 Ext.state.Manager.set('GLOBAL_id_user', id_user); // App里读取 console.log(Ext.state.Manager.get('GLOBAL_id_user'));
内容的提问来源于stack exchange,提问作者graf-8269
相关产品推荐
相关产品推荐

