2014-03-31 27 views
1

我在Dojo中遇到了一些困难。我正在尝试构建一个包含dgrid的小部件。何时调用DGrid.startup() - 调用过早导致渲染效果不佳

的dgrid呈现这样的:

enter image description here

调整浏览器窗口后,一切都很好,它显示是这样的:

enter image description here

我认为这个问题我运行进入与调用grid.startup()函数太早有关。当我将通话延迟10秒钟(请参阅注释部分代码)时,所有内容均按预期工作。

这是我的代码:

define([ 
     // ... 
    ], 
    function(
     // ... 
    ) { 
     return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin] ,{ 
      templateString: template, 

      startup: function(){ 

       this.inherited(arguments); 
       var store = new Memory({data: this.someArray}); 
       var grid = new (declare([OnDemandGrid, DijitRegistry]))({ 
        store: store, 
        columns: { 
         name: "Name column" 
        } 
       }, this.gridDiv); 

       // If I wrap startup in this - everything is fine. 
       // window.setInterval(function(){ 
       grid.startup(); 
       // }, 1000*10); 
      } 
     }); 
    } 
); 

这是我使用的模板:

<div style="height:100%"> 
    <table border="1"> 
     <tr> 
      <td> 
       <button data-dojo-attach-point="addBtn" data-dojo-type="dijit/form/Button">Add item</button> 
       <div data-dojo-attach-point="gridDiv"></div> 

      </td> 
      <td> 
       Insert Summary here. 
      </td> 
     </tr> 
    </table> 
</div> 

问:这到底是怎么回事?我应该在哪里给dgrid打电话启动?

回答

0

正如预期的那样,问题在于调用启动方法太早 - 但是小部件本身没有问题。

遇到的问题是与父窗口小部件。父窗口小部件(TabContainer)没有正确启动。这是父控件是如何工作的:

  1. 创建新TabContainer的:var tc = new TabContainer({...});
  2. 创建新的contentPane:var cp1 = new ContentPane({content: <the above widget>, ...});
  3. 添加的contentPane到TabContainer的:在TabContainer的tc.addChild(cp1);
  4. 呼叫启动:tc.startup();

更改顺序为此,解决了问题:

在TabContainer的 var tc = new TabContainer({...});
  • 启动电话:
    1. 创建新TabContainer的tc.startup();
    2. 创建新的contentPane:var cp1 = new ContentPane({content: <the above widget>, ...});
    3. 添加到contentPane的TabContainer的:tc.addChild(cp1);
  • 相关问题