关于javascript:查看

View & store loaded before controller's init

我正在构建Sencha touch 2.1应用程序。

在我的应用程序中,我有一个全局变量,该全局变量保留了我的控制器类的引用。该引用用于在存储区之一的负载上执行控制器功能,但是当我在速度较慢的远程服务器上部署此功能并且在此全局变量获取控制器对象的引用之前触发了存储区的负载时,就会出现问题。为了在存储加载之前提供此参考,我尝试将初始化逻辑放入控制器的init方法

1
2
3
init : function(){
    bossController = this.getApplication().getController('Boss');
},

在控制器的init方法中但查看


示例代码中缺少某些部分,因此仅是提示/猜测。我猜您的商店的autoLoad属性为true,因此get \\会在初始化后立即加载。打开它,然后尝试类似的事情。

1
2
3
4
5
6
init : function(){
    bossController = this.getApplication().getController('Boss'); // bossController where is this var defined?
    // fire a ready event
    // or
    Ext.StoreMgr.lookup('YourStoreName').load();
}

或者提供有关商店,谁来装载,何时装载以及在哪个范围内的更多信息。


我很好奇我在这里提出的建议:getController()不会加载文件并且不会触发init,而lauch也对此有所帮助。您可以从app.js中删除视图并进行存储,然后将其放入控制器本身。我认为应该仅在定义控制器后才能定义视图和存储。


加载数据应由控制器执行,但不应查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   Ext.define("myshop.controller.Boss", {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            magazinePanel: '#hc'
        },
        control: {
            magazinePanel: {
                initialize: 'initializeMagazinePanel'
            }
        }
    },

    initializeMagazinePanel: function() {
        var me = this;
        var myStore = Ext.create('myshop.store.MagazineStore', {
            listeners:{
                scope: this,
                load: this.onMagazineStoreLoad
            }
        });
        myStore.load();
    },

    onMagazineStoreLoad: function(me, records, successful, operation, eOpts) {
        this.getMagazinePanel().setMasked(false);
        this.loadMagazines(records)
    },

    loadMagazines: function(records) {
    }
});


您是否可以将loadMagazines函数放在控制器中显式load()函数的成功回调中,并按照@sra的建议禁用autoLoad?

类似的东西:

1
2
3
4
5
6
7
8
//in controller
init: function() {
    myStore.load({
        callback: function(recs, op, success) {
            // do the load magazines thing
        }
    })
}