存储加载后ExtJs的事件

时间:2016-12-20 09:59:32

标签: extjs

我想在storeLoad()之后在ExtJS网格中触发一个事件。除了渲染之外,是否有任何我可以使用的事件。

afterrender: function(grid) {
            var store = grid.getStore();
            if (store.isLoaded()) {
               // not getting debugger here.
            }
        },

2 个答案:

答案 0 :(得分:3)

只需在商店中使用加载事件:

var store = grid.getStore();
store.on('load', function(){
    //Your function here
});

答案 1 :(得分:0)

仅在@ ludovic-feltz请求中发布此内容:)

我认为这是黑客行为,而不是适当解决方案...

基本上,在渲染之后,我会延迟isLoaded检查一点点,如果没有加载,我会每隔100ms重复一次,直到加载存储以设置排序或其他操作为止。

我之所以这样走,是因为store.isLoading()给了我false:(

listen: {
    component: {
        'grid': {
            afterrender: 'onGridAfterRender'
        }
    }
},

onGridAfterRender: function () {
    setTimeout(this._setInitialSorting.bind(this), 10);
},

_setInitialSorting: function () {
    var view = this.getView();
    var grid = view.down('grid');
    var store = grid.getStore();

    // remove this console.log's
    console.log('\n_setInitialSorting', new Date().getTime(), store.isLoading(), store.isLoaded());
    
    if (store.isLoaded()) {
        store.sort([{property: 'column1', direction: 'ASC'}]);
        return;
    }

    setTimeout(function () {
        this._setInitialSorting();
    }.bind(this), 100);
},

我刚刚在上面添加了console.log,以查看发生了什么,这就是结果:

_setInitialSorting 1593589691157 false false
_setInitialSorting 1593589691258 true false
_setInitialSorting 1593589691360 true false
_setInitialSorting 1593589691584 false true

我希望我曾经做过,尽管:D

因此似乎 isLoading事件中false最初是afterrender!但是100毫秒后,它进入了true

因此,我将超时更改为仅10ms,以获得一些垃圾邮件:

_setInitialSorting 1593589864967 false false
_setInitialSorting 1593589865007 true false
_setInitialSorting 1593589865016 true false
...
_setInitialSorting 1593589865159 true false
_setInitialSorting 1593589865165 true false
_setInitialSorting 1593589865383 false true

同样,在isLoading事件之后的第一个afterrender检查是false,然后变成true ...

顺便说一句,为全面披露,我做了尝试:

listen: {
    store: {
        '*': {
            load: 'onStoreLoaded',
        }
    }
},

但是它只是使UI保持闪烁并且不显示任何数据:(