【问题标题】:Dojo grid inside titlePane not getting painted until the browser is resized在调整浏览器大小之前,不会绘制 titlePane 中的 Dojo 网格
【发布时间】:2012-07-26 05:24:05
【问题描述】:

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

我有点卡住了,请分享您对此的想法。

谢谢, 维克拉姆

【问题讨论】:

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


    【解决方案1】:

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

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

    所以它应该在 DataGrid 完成加载数据时自动调整大小。

    希望我能帮上忙。

    你好,西蒙

    【讨论】:

    • 嗨西蒙,谢谢.. 将尝试此解决方案
    【解决方案2】:

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

    【讨论】:

    • 谢谢西蒙。通过设置绝对高度解决了我的问题。但我想让网格动态计算高度。截至目前,我使用设置高度。再次感谢..
    【解决方案3】:

    您必须在每次容器改变大小时调用TabContainer.layout()。为此,您可以 1) 在包含 DOMNode 时监视 DOMEvents onunderflow 和 onoverflow 或 2) 当容器变得可见时(once-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);
    }
    

    【讨论】:

    • 如果你需要一个快速的补丁,像grid.selectedChildWidget.resize(dojo.coords(grid.containerNode)); 这样的东西可能会解决问题
    【解决方案4】:

    我的问题

    我的情况和你相似

    • 网格位于标题窗格中(默认关闭)。
    • 网格可以随时销毁和重新创建。
    • 当用户出现问题时:
      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();
        }
    });
    

    【讨论】:

      【解决方案5】:

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

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

      这一切都解决了! 享受吧!

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2012-03-12
          • 1970-01-01
          • 2012-02-23
          • 1970-01-01
          • 1970-01-01
          • 2020-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多