常常會有人問我,為什麼我的Grid不能歲視窗的變得而自動調整。了解後,發現很多人都習慣在渲染子元件的時候將Gird渲染到容器內的一個div裡,而這正是問題的所在。
在Ext JS的佈局系統中,能控製到的是容器的子組件,而對於渲染到容器中一個DIV的Grid,它並不知道在這容器裡添加了一個Grid,當調整大小的時候,也就無法去調整Grid的大小了,而這就是為什麼Grid不會跟著容器的改變而改變了。
為什麼那麼多人喜歡用這種方式來加入子元件呢? 我想原因主要有以下兩點:
1.不知道如何在容器內添加子組件,
2.習慣了使用JQuery等其他框架的開發方法,一時無法改變
第一個原因,只要是動態添加Grid,搞到很多初學者束手無策,譬如,我的Grid要從遠端返回後才知道怎麼創建,我怎麼去拿這個腳本和添加到容器呢?筆者在學習Ext JS也犯過這樣的錯誤,可以理解。所以,本文的作用就是來解惑的。
辦法有兩個:一是,使用Ajax把整個Grid(或其他元件的設定物件)載入到本地,然後使用容器的add方法就可以將元件加入容器;一是直接使用容器的load功能,直接載入子元件並渲染,傳回的資料就是子元件的配置物件。
第二個原因是習慣問題,只能自己去修正了,盡快熟悉Ext JS的開發模式就可以很容易改掉這個習慣。
如果是使用Ext JS 4的MVC做開發,基本上不會出現這麼尷尬的情況了,因而可以將子組件做成視圖,然後在控制器中將視圖添加到容器中就可以了。