2016-02-01 101 views
2

我改變了幾十個gridpanel列的寬度。我想在表演時戴上口罩。'resumelayouts'事件處理完成後,有沒有辦法調用一個函數?

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); 

回答

0

問題是,你最終綁定當前的「線程」,所以瀏覽器沒有得到重繪的機會。你可以做這樣的事情:

grid.setLoading(true); 
setTimeout(function() { 
    Ext.suspendLayouts(); 
    columns.forEach(function (column) { 
     column.setWidth(...); 
    }, this); 
    Ext.resumeLayouts(); 
    grid.setLoading(false); 
}, 1); 

上述放棄從目前的「線」控制,並允許重繪它開始佈局操作之前。

+0

我試過了。它不起作用,因爲(正如我在評論中提到的)resumeLayouts()只是觸發事件並返回控件。然後事件處理程序異步完成所有工作(我猜)。同時頁面保持舊寬度。 –

+0

如果你想要刷新,那麼你需要調用'Ext.resumeLayouts(true);'。 –

相關問題