2016-06-25 25 views
1

我不明白爲什麼第一次遇到這種代碼運行:ExtJS的4:窗口不是在首秀正確漿紗

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

它輸出這樣的: enter image description here

但是,一旦你關閉和它運行下一次,它呈現的窗口大小完美: enter image description here

這裏的小部件的代碼: https://jsfiddle.net/ardimaunahan/63ofm68o/

我嘗試了幾個事件來觸發doComponentLayout,但它仍然不會生效:show,beforeshow,activate。不過,如果你通過瀏覽器控制檯做到這一點,它完美地調整:

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

有人能告訴我這是爲什麼發生?謝謝!

更新1: 我檢查了差異上生成的HTML,它不同於在主窗口的高度和寬度: enter image description here

我想知道如果有一個在Ext.window任何配置。我可以使用這個窗口來修復這個bug。

更新2: 這裏是一個完全有效的小提琴:https://jsfiddle.net/ardimaunahan/hcg4p3v4。必須在瀏覽器上按Ctrl + F5才能看到損壞的彈出窗口。您還需要點擊Esc關閉彈出窗口。在Firefox/Chrome中,成功點擊顯示彈出按鈕會使佈局正常,但在IE中它仍然被破壞。

+0

我嘗試使用「tpl」窗口內的組件,但結果相同。也檢查了生成的html中的差異,只有窗口的高度和寬度不同(見上圖) – firnnauriel

+0

無法用僅提供的代碼重現,我認爲CSS丟失。請提出展示問題的小提琴。 – Alexander

+0

您可以嘗試調用doComponentLayout兩次還是延遲doComponentLayout幾毫秒的幫助。 – Alexander

回答

0

好吧,我想我找到了根本原因。這是在我的HTML標籤專門這一行(77-78):

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

修復將設置的大小爲35px 35px。當我爲組件的實例指定寬度和高度(700 x 500)時,我發現它。我注意到,當它第一次顯示時,當圖標出現時它會稍微向右移動。看起來,因爲圖像是遠程檢索的,並且標籤上沒有標註維度,所以Ext框架並不知道最初需要分配多少。但是一旦圖標出現並且您隱藏窗口並重新打開它,它現在就可以完美地計算窗口的最終寬度和高度。

0

我擔心你必須重寫框的show()功能。

下,似乎爲我工作:

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

我不知道這是否能跨瀏覽器,使用前請檢查。

+0

不幸的是,重寫show()不適合我。你試過什麼瀏覽器及其版本?我使用Firefox 46.0.1和Chrome 51.0.2704.103 m – firnnauriel