Dojox.grid.DataGrid - 在窗口小部件中 - 仅在可见选项卡上呈现

时间:2009-07-14 19:26:24

标签: dojo

我正在使用包含DataGrid对象的Widget。当Widget包含在第一个选项卡中时(这是可见选项卡),Widget工作正常,但在第二个选项卡上使用相同的代码时则不行。

代码是一样的我已经做了几次检查,以确保没有其他问题 - 非网格代码渲染正常 - 只有有问题的网格。我已经尝试手动设置高度和宽度,这只会在第二个选项卡上产生一个大的灰色矩形。

我是否需要告诉Grid以某种方式刷新 - 或者它是TabContainer的属性?

帮助 - 这让我很生气!

3 个答案:

答案 0 :(得分:5)

是的,这对电网来说是个大问题。如果在标签容器中以明确方式使用它,它将无法在不可见的选项卡上正确呈现。它需要计算高度/宽度(即使你指定它们)......正如你所见。

我解决它的方法是在选项卡上以编程方式创建网格。我在dojo forums上发布了我的解决方案。我的代码示例已经结束github.这有点太大了,无法在此处发布。如果你想要它,请告诉我,我会编辑我的答案。

还讨论nabble使用不同的解决方案。

答案 1 :(得分:1)

“调整大小”就像一个魅力!一直在寻找这个(不知道我要搜索什么),谢谢。

我使用此例程来动态确定选项卡是否有多个数据网格,因为我可能不知道单个网格的ID,也许其他人也可能使用它:

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

这将检查带有id="container"的div(如果要搜索整个DOM,则跳过该部分)以获取id为“gridNode_”的div,并对这些小部件应用“resize”。

答案 2 :(得分:0)

另一种方法是在选项卡元素选择时调整网格大小。示例代码

dojo.connect(dijit.byId('my_tab_container'),“selectChild”,function(child){

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