title窗格中的Dojo网格在调整浏览器大小之前不会绘制



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

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

谢谢,Vikram

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

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

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

希望我能帮忙。

你好,Simon

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

每次容器大小发生变化时,都必须调用TabContainer.layout()。为了做到这一点,您可以1)在包含DOMNode的情况下监视DOMEvents onunderflow和onoverflow,或者2)当容器变为可见时(一次性)。

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);
}

我的问题

我遇到了与你类似的情况:

  • 网格位于标题窗格中(默认情况下为关闭状态)
  • 网格可以在飞行中被破坏和重新创建
  • 当用户:
    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();
    }
});
  • dojo/方面文档
  • 如果你破坏了它,不要忘记从你的网格中删除它
  • 我是在dojo v1.8.1上做的

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

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'));

这一切都解决了!享受

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

相关内容

  • 没有找到相关文章

最新更新