ExtJS 4:Window 首次显示时尺寸不正确

ExtJS 4: Window not sizing correctly on first show

我无法理解为什么第一次看到这段代码运行:

var mypopup = Ext4.create('Suidgets.NSConfirmationBox', {
    title: 'Delete',
    message: 'Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>Do you want to delete this row? Do you want to delete this row? Do you want to delete this row?<br>',
    id: 'mypopup',
    listeners: {
        afterrender: function() {
            this.doComponentLayout();
        }
    }
});

mypopup.show();

它输出这个:

但是一旦你关闭它并且下一次它是 运行,它会完美呈现 window 大小:

这是小部件的代码: https://jsfiddle.net/ardimaunahan/63ofm68o/

我尝试了几个事件来触发doComponentLayout,但仍然没有生效:show、beforeshow、activate。但是,如果您通过浏览器控制台执行此操作,它会完美调整:

Ext4.getCmp('mypopup').doComponentLayout();

有人能告诉我为什么会这样吗?谢谢!

更新 1: 我检查了生成的 HTML 的差异,主要 window 的高度和宽度不同:

我想知道 Ext.window.Window 中是否有任何配置可用于修复维度中的此错误。

更新二: 这是一个完全有效的 fiddle:https://jsfiddle.net/ardimaunahan/hcg4p3v4。必须在浏览器上按 Ctrl + F5 才能看到损坏的弹出式布局。您还需要按 Esc 键关闭弹出窗口。在Firefox/Chrome中,成功点击Show popup button后布局正常,但在IE中还是不行。

我担心你必须重写你的盒子的 show() 功能。

以下似乎对我有用:

show:function() {
    this.callParent(arguments);
    this.doComponentLayout();
}

我不确定这是否可以跨浏览器,请在使用前检查。

好的,我想我找到了根本原因。它在我的 HTML 标签中,特别是这一行 (77-78):

     "                                    style=\"padding: 10px 20px 0px 20px\"><img",
     "                                    src=\"https://firnnauriel.duckdns.org/images/icons/popup/info.gif\"><\/td>",

解决方法是将 的大小设置为 35px x 35px。当我为我的组件实例指定宽度和高度 (700 x 500) 时,我发现了它。我注意到当它第一次显示时,当图标出现时它会向右移动一点。好像是因为图片是远程获取的,标签上没有标明尺寸,所以Ext框架一开始并不知道分配多少给它。但是一旦图标出现并且您隐藏 window 并重新打开它,它现在将完美地计算 window.

的最终宽度和高度