首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sencha Touch面膜揭秘

Sencha Touch面膜揭秘
EN

Stack Overflow用户
提问于 2013-05-27 22:54:25
回答 1查看 560关注 0票数 0

我正在创建一个包含onDisclosure事件的列表。当我单击onDisclosure图标时,我执行以下操作:

代码语言:javascript
复制
    this.getMain().push({
        xtype: 'newpanel',
        title: record.info(),
        data: record.getData()
    });

但由于"newpanel“非常大,它需要6/7秒才能显示面板。

因此,我尝试添加一个这样的掩码:

代码语言:javascript
复制
        Ext.Viewport.setMasked({
        xtype: 'loadmask',
        message: 'Loading...'
    });


    this.getMain().push({
        xtype: 'newpanel',
        title: record.info(),
        data: record.getData()
    });



    Ext.Viewport.setMasked(false); 

但由于Javascript是异步的,这些代码行不会按指定的顺序运行。首先他按下新的面板,然后我们等待6/7秒,然后他将遮罩设置为true,并立即设置为false,因此我们看不到遮罩。

有人对如何解决这种情况有什么想法吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-27 23:37:19

那块面板能有多大?我已经看到了巨大的组件组合几乎是瞬间呈现的。您的newpanel实现很可能存在问题,比如在循环中多次呈现之类的问题。您应该检查您的代码以消除这种情况。

至于你问的问题。在Javascript线程被密集的代码冻结之前,您必须给Ext一些时间来呈现蒙版。为此,您需要延迟创建面板,如下所示:

代码语言:javascript
复制
Ext.Viewport.setMasked({
    xtype: 'loadmask',
    message: 'Loading...'
});

var me = this;
setTimeout(function() {
    me.getMain().push({
        xtype: 'newpanel',
        title: record.info(),
        data: record.getData()
    });

    Ext.Viewport.setMasked(false); 
}, 100); // 100ms should be enough for rendering a loading mask

不幸的是,即使这会使蒙版变得可见,UI仍然会冻结,动画GIF也是如此(例如加载图标)。

为了避免这种情况,您需要在单独的线程中运行密集的代码,也就是通过产生一个WebWorker。但我不认为从worker渲染Ext组件是可能的……

因此,在最后的办法中,您可以在您的大面板中重复我的示例中使用的延迟策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16775743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档