如何等待将数据加载到商店

时间:2011-08-21 07:05:47

标签: javascript model-view-controller asynchronous extjs4 store

有菜单按钮(“客户端”),带有客户列表的树面板(按名称排序)和具有所选客户端详细信息的查看器。还有选择更改行动..

我的任务 - 在按钮上单击切换到客户端视图,并在每次单击按钮时选择并加载第一个客户端的详细信息。我的问题 - 商店没有加载,如何等到ext js将数据自动加载到商店?

我的控制器代码:

    me.control({
        '#nav-client': {
            click: me.onNavClientClick
        },
    ...
        'clientlist': {
        //    load: me.selectClient,
            selectionchange: me.showClient
        }
    });

    onNavClientClick: function(view, records) {
        var me = this,
            content = Ext.getCmp("app-content");
        content.removeAll();
        content.insert(0, [{xtype: 'clientcomplex'}]);
        var first = me.getClientsStore().first();

        if (first) {
            Ext.getCmp("clientList").getSelectionModel().select(me.getClientsListStore().getNodeById(first.get('clientId')));
        }
    },
...

两个主要问题:

  • 在我的情况下,这是一个很好的解决方案吗? (在树面板中选择第一个客户端)

    var first = me.getClientsStore().first(); 
    // i use another store to get first record because of i dont know how to get first record (on root level) in TreeStore
    ...
    Ext.getCmp("clientList").getSelectionModel().select(me.getClientsListStore().getNodeById(first.get('clientId')));
    

我知道这个代码在“load:me.selectClient”(但只有一次)的情况下工作正常,

  • 如果我将此代码放在按钮单击上 - 我看到错误

    Uncaught TypeError: Cannot read property 'id' of undefined
    

因为me.getClientsListStore()没有加载..所以如何检查这个商店的加载状态并等待一段时间直到这个商店将完全自动加载?...

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以收听商店的“加载”事件。像这样:

...
onNavClientClick: function(view, records) {
  var me = this;

  // if the store isn't loaded, call load method and defer the 'client view' creation
  if (me.getClientsStore.getCount() <= 0) {
    me.getClientsStore.on('load', me.onClientsStoreLoad, me, { single : true});
    me.getClientsStore.load();
  }
  else {
    me.onClientsStoreLoad();
  }
},

onClientsStoreLoad : function () {
    var me = this,
        content = Ext.getCmp("app-content");
    content.removeAll();
    content.insert(0, [{xtype: 'clientcomplex'}]);
    var first = me.getClientsStore().first();

    if (first) {
        Ext.getCmp("clientList").getSelectionModel().select(me.getClientsListStore().getNodeById(first.get('clientId')));
    }
},
...
相关问题