2016-09-23 50 views
0

我试图让一个ExtJS全局变量类,像这样:ExtJS的全局变量总是返回原始值

Ext.define('ccc.global.GlobalVariables', { 
    singleton: true, 
    username: 'hi user', 
    password: '', 
    clientID: '', 
    token: '' 
}); 

然后在控制器我试图改变变量,像这样:

ccc.global.GlobalVariables.username = loginData.username; 

现在我试图在不同的模型代理中访问这些变量,并且它不断返回原始值'hi user'

proxy: { 
    type: 'ajax', 
    extraParams: { 
     'username': ccc.global.GlobalVariables.username 
    }, 

有人看到我在做什么错了吗?

+2

使你成为小提琴https://开头小提琴。 sencha.com/#fiddle/1har,我的猜测是您的模型代理是在您调用控制器中的更改之前生成的。 – pagep

回答

5

当在代理定义中使用变量时,变量内容在定义时被设置到代理中,而不是在实例化处,特别是在使用时间。它不会自动更新。

这就是为什么至少在组件中有bind属性,它明确告诉组件将哪个配置绑定到外部源,以便在更新源时自动更新它。

IIRC代理不支持绑定混入,所以你将不得不到每一个同步/负载/ ...操作之前手动设置extraParam:

store.getProxy().setExtraParam("username",ccc.global.GlobalVariables.username); 
store.load() 
+0

明白......谢谢! – solarissf