2012-11-17 44 views
4

我在BorderContainer中啓用了「liveSplitters」(使用Dojo 1.8)的dgrid。 dgrid很好地出現,但是當我在左列和「前導」列(即dgrid在內)之間移動分隔符時,dgrid沒有正確調整大小。但是,如果我調整窗口的大小,那麼dgrid會快速恢復到適當的大小(即填充BorderContainer的「前導」窗格的100%)。Dgrid在BorderContainer中調整大小

我有dgrid在CSS中設置爲100%寬度。是否有某種方法需要告訴dgrid在分離器移動後刷新其大小?

回答

6

看看下面這個例子我寫了回答另一個dgrid相關的問題:http://jsfiddle.net/phusick/VjJBT/

你正在尋找的CSS規則是:

#grid { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    left: 0; 
    right: 0; 
    height: auto; 
} 

編輯:我認爲這可能是一個問題dgrid版本,所以我將我的dgrid更新到最新版本0.3.3,併爲您的問題創建了一個測試:http://jsfiddle.net/phusick/5mHTS/

嗯,這不是版本問題,0.3.1和0.3.3在調整BorderContainer時都可以正常工作,但只能在Chrome和Firefox中使用。我轉載的問題,在IE9和Opera 12.10:

enter image description here

電網需要調用grid.resize()適當調整,調整BorderContainer時不會在IE9 /歌劇,發生,但是當你調整窗口的大小總是會發生。

DijitRegistry修復該問題,因爲佈局的構成要素,像BorderContainerContentPane,調整時要調用resize()其所有的dijit孩子。

因此,要麼子類DijitRegistrydojo/aspect監聽resize對電網的父ContentPane並調用grid::resize()

aspect.after(contentPane, "resize", function() { 
    grid.resize(); 
}); 
+0

感謝您的提示,@phusick。我補充說,但問題似乎一直存在。當我在JSFiddle示例中查看Chrome的代碼檢查器視圖時,我注意到'dgrid-header'類行沒有設置寬度。然而,在我的代碼中,Dojo似乎爲'div'標記添加了一個'style =「width:XXXpx;」'(它不是由我進行硬編碼)。當窗口調整大小時,將更新此固定寬度,但當拆分器移動時,固定寬度不會更新。任何想法爲什麼它設定一個固定的寬度? –

+0

實際上,就我看來,Dijit(或dojo.parser?)會在頁面上添加這些固定樣式。而且他們沒有適當調整所有的時間。我需要設置一些常規設置嗎?如果我在CSS中的'.dgrid-header-row'上使用'!important',我可以覆蓋固定寬度的內聯樣式,但這些感覺像是一種黑客。 –

+0

爲了不斷回覆自己,似乎如果我告訴dgrid在DijitRegistry中混合使用,效果會更好(雖然我不清楚爲什麼你的示例沒有混合它並且工作正常 - 思想?)。然而,我的標題ContentPanel不會動態調整到頁面寬度,一旦dgrid呈現,我不知道爲什麼。有什麼建議麼? –

2

正如評論指出,以@ phusick的回答,Dgrid調整大小,如果得到適當的我用的是DijitRegistry混入。我還有其他一些調整大小的問題,但他們必須在我的CSS中設置相對寬度(例如100%)。如果我刪除ContentPanel不需要的大小,則所有元素都調整大小。 CSS已經從Dojo 1.5中移除了,它顯然沒有像在CSS中設置大小的ContentPanel那樣反應。

+1

你能發佈一個解決問題的代碼smaple嗎? – Kate

+0

如果你詳細闡述了「如果我使用DijitRegistry混入」,那將會很好。正如Simon所建議的,代碼示例會很有幫助。 – Manachi

相關問題