Javascript 有没有办法在';之后立即调用函数;简历布局';事件处理完成了吗?
我更改了几十个gridpanel列的宽度。我想在表演时展示一个面具Javascript 有没有办法在';之后立即调用函数;简历布局';事件处理完成了吗?,javascript,extjs4.2,Javascript,Extjs4.2,我更改了几十个gridpanel列的宽度。我想在表演时展示一个面具 grid.setLoading(true); Ext.suspendLayouts(); // columns -- grid columns columns.forEach(function (column) { column.setWidth(...); }, this); // fires 'resumelayouts' event and immediately returns. Ext.resumeLayout
grid.setLoading(true);
Ext.suspendLayouts();
// columns -- grid columns
columns.forEach(function (column) {
column.setWidth(...);
}, this);
// fires 'resumelayouts' event and immediately returns.
Ext.resumeLayouts();
// performs before everything updates its layout, which takes 3-4 seconds.
grid.setLoading(false);
问题是,您最终会占用当前的“线程”,因此浏览器没有机会重新绘制。你可以这样做:
grid.setLoading(true);
setTimeout(function() {
Ext.suspendLayouts();
columns.forEach(function (column) {
column.setWidth(...);
}, this);
Ext.resumeLayouts();
grid.setLoading(false);
}, 1);
上述操作将放弃当前“线程”的控制,并允许在开始布局操作之前进行重新绘制。我尝试了此操作。它不起作用,因为(正如我在评论中提到的)resumeLayouts()只是触发事件并返回控件。然后事件处理程序异步完成所有工作(我猜)。同时页面保持原来的宽度。如果你想让它齐平,那么你需要调用
Ext.resumealayouts(true)代码>。