2016-02-01 2 views
2

Я меняю ширину на десятки столбцов сетки. Я хочу показать маску во время ее выполнения.Есть ли способ вызвать функцию сразу после завершения обработки событий «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);'. –

 Смежные вопросы

  • Нет связанных вопросов^_^