dojox DataGrid无法显示

时间:2012-08-17 14:24:50

标签: javascript dojo

我在html标记中声明了一个contentPane / tabContainer。第3个选项卡包含一个dojox.grid.DataGrid,默认情况下是隐藏的。

在findTask.execute之后,dataStore已设置并且dojox.grid.DataGrid已填满,但我无法显示它。

这是一个jsfiddle:

http://jsfiddle.net/dbecker88/BhNEa/2/

在html标记的底部,如果删除“searchStatus”div并重新运行jsfiddle,结果显示正常。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

原因是,ContentPane布局容器会评估是否存在单个子级 - 或多个子级。它以不同的方式处理大小调整 - 并且将知道'isSingleChild'和child ==小部件。如果它重新识别一个小部件,它会调用它的resize函数。

要解决此问题,您需要手动调用大小调整 - 使用包含网格的ContentPane的尺寸。这是一种方式,通过标记

      <div id="searchCol" dojoType="dijit.layout.ContentPane" title="Find Results">


<script event="onShow" type="dojo/connect">
  // onShow connect is 1 ms too early to connect, adding 'whenIdle'
  setTimeout(function() {
    dijit.byId('grid').resize(
        dojo.getMarginBox('searchCol')
    );
  },1);
</script>



          <!--REMOVE the searchStatus element and the dataGrid displays? -->
          <div id="searchStatus"></div>
          <!--REMOVE the searchStatus element and the dataGrid displays? -->

          <table data-dojo-type="dojox.grid.DataGrid" data-dojo-id="grid"  id="grid" data-dojo-props="rowsPerPage:'5', rowSelector:'20px'">
                  <thead>
                    <tr>
                      <th field="PARCELID">Parcel ID</th>
                      <th field="OWNERNME1" >Owner 1</th>
                      <th field="OWNERNME2">Owner 2</th>
                      <th field="RESYRBLT ">Year Built</th>
                      <th field="SITEADDRESS" width="100%">Address</th>
                    </tr>
                  </thead>
                </table>

          <button id="clearSearch" dojoType="dijit.form.Button" type="button" onclick="clearSearchResults()" title="Clear Search Results" label="Clear Results"
                    iconClass="clearSearchBtn" style="position:absolute; bottom:7px;cursor:pointer; visibility:hidden"></button>
      </div>

当然,这将消耗完整的大小,并且不会为按钮和searchstatus省略任何内容。你需要一个计算来做到这一点。类似于:

var size = dojo.getMarginBox('searchCol');
size.h = size.h 
   - dojo.getMarginBox(dojo.byId('searchStatus')).h
   - dojo.getMarginBox(dojo.byId('clearSearch')).h;
dijit.byId('grid').resize(size);