как ждать загрузки данных в магазин - PullRequest
0 голосов
/ 21 августа 2011

Есть кнопка меню («клиенты»), древовидная панель со списком клиентов (отсортировано по имени) и средство просмотра с выбранными данными клиента. Существует также действие selectionchange ..

Моя задача - при нажатии кнопки переключаться в режим просмотра клиента, выбирать и загружать данные для первого клиента при каждом нажатии кнопки. Моя проблема - хранилище не загружено, как ждать, пока 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 голосов
/ 24 августа 2011

Вы можете прослушать событие магазина «загрузить». Как это:

...
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')));
    }
},
...
...