Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当dojo dijit.Grid小部件';的父容器调整大小_Javascript_Dojo - Fatal编程技术网

Javascript 当dojo dijit.Grid小部件';的父容器调整大小

Javascript 当dojo dijit.Grid小部件';的父容器调整大小,javascript,dojo,Javascript,Dojo,我在标题板中有一个dojo网格小部件,其宽度设置为100% 标题栏呈液体布局,因此其宽度随浏览器窗口大小而变化。我遇到的问题是,当父窗口展开(或收缩)时,网格本身不会改变其宽度。我可以通过在网格上调用render()来调整它自身的大小,但是如何检测父窗口的大小,以便我知道如何重新绘制网格小部件?我有时不得不这样做;这并不太难: 函数resizeGrid(){ //在这里做您需要的任何事情,例如: myGrid.resize(); myGrid.update(); } dojo.addOnLoad

我在标题板中有一个dojo网格小部件,其宽度设置为100%


标题栏呈液体布局,因此其宽度随浏览器窗口大小而变化。我遇到的问题是,当父窗口展开(或收缩)时,网格本身不会改变其宽度。我可以通过在网格上调用render()来调整它自身的大小,但是如何检测父窗口的大小,以便我知道如何重新绘制网格小部件?

我有时不得不这样做;这并不太难:

函数resizeGrid(){
//在这里做您需要的任何事情,例如:
myGrid.resize();
myGrid.update();
}
dojo.addOnLoad(函数(){
connect(窗口,“onresize”,resizeGrid);
});

我也有同样的问题。我尝试了一个类似于Ryan Corradini的解决方案

只有第一次显示才可以。如果更改窗口大小,将正确调用resize函数,但网格大小保持不变

请注意我的特殊条件:在调整大小功能中,我必须设置网格的高度属性(仅调整大小+更新似乎不够)

HTML看起来像:

<div id="msgItems" dojoType="dijit.layout.ContentPane" region="center"
 style="padding:2px;">
<form id="msgDefForm" name="msgDefForm" dojoType="dijit.form.Form">
<div style="display:none;"><input type="text" name="msgName" id="msgName" dojoType="dijit.form.TextBox"></input>
</div>

<table dojoType="dojox.grid.DataGrid" jsId="msgGrid" id="msgGrid"
rowsPerPage="10" rowSelector="5px" singleClickEdit="false" loadingMessage="Loading message content"  
errorMessage="Error while loading the message content" selectable="true"  >
  <thead>
    <tr>
      <th field="zone" width="8em" cellType="dojox.grid.cells.Select" options="properties, values" editable="true">Zone</th>
      <th field="property" width="auto" editable="true">Property</th>
      <th field="value" width="auto" editable="true">Value</th>
    </tr>
  </thead>
</table>

</form>
</div>
... in startOnLoad :
dojo.connect( window, "onresize", msgGridResized);
msgGridResized ();
...

function msgGridResized () {
    var cont = dojo.byId("msgItems")
    var h = cont.clientHeight - 4;
    if (h >= 0){
        var grd = dijit.byId("msgGrid");
        grd.attr("height", h+"px" );
        grd.resize();
        grd.update();
    }
}

没有时间为您尝试这一点,但您不能只使用dojo。连接到TitlePane的resize事件,并在处理程序中调整网格大小或使用声明/标记中的百分比设置网格大小?

您可以尝试以下代码:

grid.resize({ w: 400, h: 400 });
如果您想更一般一点:

var parentDiv = dom.byId('parentDiv');
grid.resize({ w: parentDiv.clientWidth, h: parentDiv.clientHeight });
参考:

希望它对您有用

好的!我发现:“表单”标签似乎与布局计算相冲突。我只是把它取出来,并相应地修改代码,以便不需要隐藏的输入字段,现在就可以了。