我想在storeLoad()之后在ExtJS网格中触发一个事件。除了渲染之外,是否有任何我可以使用的事件。
afterrender: function(grid) {
var store = grid.getStore();
if (store.isLoaded()) {
// not getting debugger here.
}
},
答案 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保持闪烁并且不显示任何数据:(