EXTJS - 加载掩码

EXTJS - Load Mask

我想展示源代码,它取自 div 和 jQuery,在 Ext.Window 中。我设法做到了,但我的问题是有时源代码很大,因为它包含编码图像,并且 Ext.Window 在通过点击事件触发后需要一些时间才能出现在屏幕上。我想展示 Ext.Window,但在数据准备好之前有一个加载图标。

win = new Ext.Window ({
    title:'Source Code',
    width:800,
    height:300,
    items: [{
        xtype : 'textarea',
        readOnly: true,
        value: sourceCode
    }]
});
win.show();

尝试使用未定义的函数和 setTimeout 函数。不要忘记配置布局:'fit'.

Ext.application({
name : 'Fiddle',

launch : function() {
       var win =  Ext.create('Ext.window.Window', {
            title:'Source Code',
            width:800,
            height:300,
            layout: 'fit',
            items: [{
                xtype : 'textarea',
                readOnly: true,
                value: 'test'
            }]
        });


        win.show(undefined, function(){
            win.getEl().mask('Loading...');

            setTimeout(function() {
                win.getEl().unmask();
            }, 3000);

        });
    }

});

或者

Ext.application({
name : 'Fiddle',

launch : function() {
   Ext.create('Ext.window.Window', {
        title:'Source Code',
        width:800,
        height:300,
        layout: 'fit',
        items: [{
            xtype : 'textarea',
            readOnly: true,
            value: 'test'
        }]
    }).show(undefined, function(){
        win.getEl().mask('Loading...');

        setTimeout(function() {
            win.getEl().unmask();
        }, 3000);

     });
  }

});

尝试

    win.show(undefined, function(){
        win.getEl().mask('Loading...');
        win.suspendEvents();
        win.down('textarea').setValue(sourceCode);
        win.down('textarea').focus();
        win.resumeEvents();
        setTimeout(function() {
            win.getEl().unmask();
        }, 2000);
    });

您可以尝试仅在 window 已经显示后设置值:

win = new Ext.Window ({
    title:'Source Code',
    width:800,
    height:300,
    items: [{
        xtype : 'textarea',
        readOnly: true
    }],
    listeners: {
        afterrender: function(sourceWindow) {
            sourceWindow.down('textarea').setValue(sourceCode)
        }
    }
});
win.show();

然后你可以在上面添加 josei 的 mask/unmask 方法,尽管我建议你搜索一些在设置值后发生的事件以删除掩码(你可以尝试 change textarea 上的事件),因为这样你的等待时间就不会是固定的,而是与渲染 textarea 值所花费的时间有关。