2009-07-14 86 views
4

我正在使用包含DataGrid對象的窗口小部件。當包含在第一個選項卡(這是可見選項卡)時,Widget可以正常工作,但當我在第二個選項卡上使用相同的代碼時,Widget無法正常工作。Dojox.grid.DataGrid - 在窗口小部件中 - 僅在可見選項卡上呈現

代碼是一樣的我已經做了幾次檢查,以確保沒有其他問題 - 並且非網格代碼呈現良好 - 只有網格出現問題。我曾嘗試手動設置高度和寬度,這隻會導致第二個選項卡上出現一個灰色的大矩形。

我需要告訴網格以某種方式刷新 - 或者它是TabContainer的屬性嗎?

幫助 - 這讓我很生氣!

回答

5

是的,這是網格的一個大問題。如果您在製表符容器中聲明使用它,則它將無法在不可見的製表符上正確呈現。它需要計算高度/寬度(即使您指定了它們)......如您所見。

我解決它的方法是在選項卡上以編程方式創建網格。我在dojo forums上發佈了我的解決方案。我的代碼示例已結束github.在這裏發佈methinks太大了。讓我知道如果你想要它,我會編輯我的答案。

還有一個關於nabble與不同的解決方案的討論。

0

另一種方法是根據選項卡元素選擇調整網格大小。示例代碼

dojo.connect(dijit.byId( 'my_tab_container'), 「selectChild」 功能(兒童){

 // if second tab (could be any...) selected 
     if(child.id == 'mySecondTabId'){ 
      var myGrid = dijit.byId('myGridInsideTabId'); 
      if(myGrid != null) myGrid.resize(); 
     } 
    }); 
+0

想知道在哪裏添加這段代碼? – 2010-10-01 13:53:00

1

「調整」 就像一個魅力!一直在尋找這很長時間(不知道我有什麼搜索),謝謝。

我使用這個例程來動態確定選項卡是否有多個數據網格,因爲我可能不知道一個單一網格的ID,也許有人否則可能會用到:

dojo.query('div#container div[id^="gridNode_"]').forEach(function(node, index, arr) { 
    dijit.byId(node.id).resize(); 
    }); 

這將使用id="container"(跳過那個部分,如果你想搜索整個DOM)div的id,以「gridNode_」開頭的id並將「resize」應用到這些小部件。

相關問題