【问题标题】:Is there a way to call a function right after 'resumelayouts' event processing finishes?有没有办法在“resumelayouts”事件处理完成后立即调用函数?
【发布时间】:2016-05-09 21:39:43
【问题描述】:

我更改了几十个网格面板列的宽度。我想在表演时展示面具。

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

【问题讨论】:

    标签: javascript extjs4.2


    【解决方案1】:

    问题是您最终会占用当前的“线程”,因此浏览器没有机会重新绘制。你可以这样做:

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

    上面放弃了当前“线程”的控制权,并允许在开始布局操作之前重新绘制。

    【讨论】:

    • 我试过这个。它不起作用,因为(正如我在评论中提到的) resumeLayouts() 只是触发事件并返回控制权。然后事件处理程序异步完成所有工作(我猜)。同时页面保持旧的宽度。
    • 如果你想让它刷新,那么你需要调用Ext.resumeLayouts(true);
    猜你喜欢
    • 2014-03-16
    • 2015-05-31
    • 1970-01-01
    • 2019-06-21
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多