Sencha范围问题

时间:2011-07-26 17:07:09

标签: extjs sencha-touch

我完全重写了我的问题,希望能更好地反映我在这里要做的事情。到目前为止,非常感谢你们的帮助。

我有一个名为en.js的文件,其中包含以下代码:

Ext.apply(Ext.locale || {}, {
variable:       'great success!'    
});

这是我的index.js设置代码:

Ext.setup({
tabletStartupScreen: 'tablet_startup.png',
phoneStartupScreen: 'phone_startup.png',
icon: 'icon.png',
glossOnIcon: false,
onReady: function() {
    Ext.locale = {};
    var headID = document.getElementsByTagName("head")[0],
    newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = 'en.js';
    headID.appendChild(newScript);
    loginPanel = new login.Panel();
}
});

login.Panel是使用Ext.extend的Sencha面板类的扩展。

'en.js'脚本正确添加到标题中。我在index.html文件中没有它,因为一旦解决了这个问题,将会有几个可以加载的文件,具体取决于函数的输出。这就是为什么我需要将脚本添加到onReady函数的头文件中,而不是在index.html文件本身中。

一旦添加了脚本,它就会将“变量:'非常成功'”加载到Ext.locale中, 然而我的问题目前在于login.Panel(),它是使用Ext.extend的Sencha面板类的扩展。 目前,面板中有一个按钮。

当我把它放在按钮的处理程序中时:

console.log(Ext.locale.variable)

它返回字符串“非常成功”,

但是当我尝试像这样设置按钮的文本时:

text:Ext.locale.variable,

我收到错误

Uncaught TypeError: Cannot read property 'variable' of undefined

我猜这里有一个范围问题,因为console.log()和alert()都可以访问Ext.locale,但是尝试用它来构造表单会给我一个未定义的错误。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

听起来你早就在脚本中定义了Ext.locale ...然后在onReady中你将它覆盖为Ext.locale = {}

onReady将在加载完所有其他脚本后运行。

为什么不将您的语言环境初始化代码移到on {= {}行的onReady中

答案 1 :(得分:0)

这会将三个属性及其值添加到接收对象。

Ext.apply(receivingObject, {
        property1: 'value1',
        property2: 'value2',
        property3: 'value3'
});

这里也是关于Ext.apply方法的Sencha文档: http://dev.sencha.com/deploy/touch/docs/source/Ext.html#method-Ext-apply

至于访问isReady属性,您可以执行类似if(someExtObj.isReady)的操作,但您可能对使用onReady方法更感兴趣...

Ext.setup({
    onReady: function() {
        // your setup code
    }
});