Sencha Touch 2全局变量undefined

时间:2014-01-10 10:59:05

标签: url proxy sencha-touch-2 global-variables

我正在学习Sencha Touch 2,我需要一个全局变量。我使用以下代码在app.js文件中设置一个名为TID的全局变量:

....
    launch: function() {
        // Destroy the #appLoadingIndicator element
        Ext.fly('appLoadingIndicator').destroy();

        // Initialize the main view
        Ext.Viewport.add(Ext.create('Layouts.view.Main'));
        TID = 7;
    },
....

在LIST视图中,我成功确认了默认设置值并使用以下代码重置该值:

....
itemtap: function(data, index){
    var record = data.getStore().getAt(index);

    var store = Ext.getStore('Sections');

    this.fireEvent('ListContent', store.getData().all[index].data.tid);
    this.TID = store.getData().all[index].data.tid;
    console.log('Confirming TID: ' + this.TID);
    console.log('Confirming TID: ' + TID);
},
....

console.log代码返回以下输出:

Confirming TID: 10
Confirming TID: 7

我正在尝试在商店中使用此TID值来使用以下代码从远程服务器过滤内容:

....
proxy: {
    type: 'ajax',
    url: 'http://myserver/sections/content/'+this.TID,

    reader: {
        type: 'json',
        rootProperty: 'JSON',
    }
},
....

这就是问题所在。在我的浏览器的网络流量中检查时, this.TID TID 都会返回未定义

1 个答案:

答案 0 :(得分:0)

在创建类本身时设置url参数 - 而不是在Store实例化时。因此,当首次读取该文件时,TID尚未设置,Section配置将不再读取该文件。您可能需要使用的设置是

var store = Ext.getStore('Sections');
store.getProxy().setUrl('http://myserver/sections/content/' + TID);
store.load( ... );

要抽象出这个功能,向Store添加创建正确URL的方法会更安全。

setUrlForTid: function(tid) {
    this.getProxy().setUrl('http://myserver/sections/content/' + tid);
}

但是,理想情况下,您不会使用全局变量来管理它,并且在进行此调整后您可能不必这样做。您应该使用从列表中获取的数据传递它,类似于您现在在TID处理程序中设置itemtap的方式。