2009-07-14 83 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”应用到这些小部件。

相关问题