在调整浏览器大小之前,titlePane内的Dojo网格没有被绘制

时间:2012-07-26 05:24:05

标签: dojo dojox.grid dojox.grid.datagrid

我在标题窗格中有一个dojo增强网格,它位于Tabcontainer中。我正在动态创建一个选项卡容器并绘制包含网格的标题窗格。第一次正确绘制网格,但如果我关闭选项卡并再次尝试打开tabcontainer标题窗格,但是标题窗格内的网格未绘制(或者更确切地说是不可见),直到我进行浏览器调整大小。 那么任何人都遇到过类似的问题吗?请让我知道解决方案。 我试过resize(),update()&网格上的startup()方法没有成功。

我有点被困,请分享你对此的想法。

谢谢, 维克拉姆

6 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并通过dojo连接找到了解决方法:

dojo.connect(Datagrid,"_onFetchComplete",DataGrid,"_resize");

因此,当DataGrid完成加载数据时,它应自动调整大小。

希望我能提供帮助。

问候,西蒙

答案 1 :(得分:0)

您是否尝试在网格上设置绝对高度? 您尝试过哪些浏览器? (我在使用IE的TabContainer中遇到了DataGrid的各种问题)

答案 2 :(得分:0)

每次容器更改大小时,您必须调用TabContainer.layout()。为此,您可以1)监视包含DOMNode的onunderflow和onoverflow上的DOMEvents,或者2)当容器变为可见时(一次n-forall)。

window.onresize事件修复它的原因是TabContainer挂钩所述事件并调用它自己的布局。

在你的情况下,TabController使用TabContainer的窗格摆弄,可能在某处错过了'layoutChildren'。最理想的情况是,您应该将网格作为第一个仅用于选项卡的子项。

在部署网格后,它将采用绝对的计算高度 - 从TabContainer'继承'。一旦TabContainer选择调整大小或指示这样做,就会触发它。

手动,您应该能够实现这些行 - 重新打开选项卡后。该脚本取自_Grid.js来说明

var grid = dijit.byId('MYGRIDID');
require(["dijit/layout/utils"], function(layerUtils) {
   layoutUtils.layoutChildren(grid.domNode,
               grid._contentBox, 
              [grid.tablist, {
                  domNode: grid.tablistSpacer,
                  layoutAlign: titleAlign
              }, {
                  domNode: grid.containerNode,
                  layoutAlign: "client"
              }]);
   grid._containerContentBox = layoutUtils.marginBox2contentBox(grid.containerNode,
              {
                  domNode: grid.containerNode,
                  layoutAlign: "client"
              });
   // note this line in particular
   grid.selectedChildWidget.resize(grid._containerContentBox);
}

答案 3 :(得分:0)

我的问题

我的类似情况与你的相似:

  • 网格位于标题栏中(默认情况下已关闭)。
  • 网格可以在运行中销毁和重新创建。
  • 问题出现在用户:
    1. 打开窗格。
    2. 关闭窗格。
    3. 重新创建网格。
    4. 重新打开窗格。
    5. 网格不可见,直到调整浏览器窗口大小!

我的解决方案

我的方法是每当打开标题窗格时强制resize()在我的网格上。 我使用了这样的代码,在我可以访问网格和窗格的地方:

var titlePane = registry.byId("title-pane-id");
var handle = aspect.after(titlePane, "toggle", function(deferred) {
    if (titlePane.open) {
        grid.resize();
    }
});

答案 4 :(得分:0)

我的解决方案太简单了:在网格声明中定义粗体参数写在这里:

grid = new EnhancedGrid({id: 'MyIDgrid',
store: dataStore = new ObjectStore({objectStore: myStore}),
        structure: structureGrid,
        plugins: pluginGrid,
        style : 'width: 725px; height: 350px',
        autoWidth : true,
**autoHeight : false,height:'200px',**
        elasticView : '2'
}, document.createElement('div'));

这一切都解决了! 享受!

答案 5 :(得分:0)

style="height: auto;"符合目的。