我的一个页面中有一个Dojo Datagrid(包含更多内容),并出现以下问题:只要我点击一个列标题来更改排序,页面就会跳起来,就好像我点击了一些HTML锚
有趣的是,页面跳转会使网格在跳转后仅显示前两行,而不是(例如)跳转后网格顶部的网格开始,这是锚点的预期行为使用。
问题出现在不同的浏览器中(测试过:Firefox 3.6,Opera 10,IE6),所以我猜它可能是一个Dojo问题/ -bug。
任何让这种烦人行为停止的想法都停止了吗?
问候, Select0r
PS:this似乎描述了类似的问题,仅针对JQuery(不幸的是,没有解决方案)
答案 0 :(得分:4)
在DataGrid和底层的_Grid中有一些力可以使网格缩小到读取之间的标题行的高度,然后重新增长。如果您在滚动到页面底部时遇到了专门描述的行为,那么您的浏览器可能会“向上滚动”(以便其视口的底部与页面的新底部对齐),但是当表格时加载新数据并再次调整大小,您的浏览器仍然“向上滚动”。
我花了一些时间在DataGrid和_Grid周围挖掘。我发现这有两个原因:
DataGrid的_clearData函数,它调用updateRowCount(0)(即将网格减少到0行,直到新结果出现)
_Grid的_resize函数,如果_autoHeight为true,则将其viewsNode的高度样式设置为''(如果autoHeight为true,或者是一个数字> = rowCount,则似乎是这种情况)
< / LI> 醇>如果你不反对搞乱源代码,你可以简单地从DataGrid._clearData中删除一行代码,从_Grid._resize中删除另一行代码并完成它;假设你想要一个更干净的方法,我试图用几个变通方法继承DataGrid。看看你的票价。
dojo.provide('my.DataGrid');
dojo.declare('my.DataGrid', dojox.grid.DataGrid, {
updateRowCount: function(inRowCount) {
if (inRowCount > 0) { //ignore requests to set rowCount to 0
this.inherited(arguments);
}
},
_resize: function(changeSize, resultSize) {
if (this._autoHeight) {
//sizeblink workaround
var _viewsNode = this.viewsNode;
this.viewsNode = {style: {height: ''}}; //_Grid._resize crash dummy
this.inherited(arguments);
this.viewsNode = _viewsNode;
//call post-functions again with node properly hooked
this.adaptWidth();
this.adaptHeight();
this.postresize();
} else {
this.inherited(arguments);
}
}
});
//carry over DataGrid's custom markupFactory, otherwise declarative won't work
my.DataGrid.markupFactory = dojox.grid.DataGrid.markupFactory;
希望它有所帮助,或者至少提供洞察力。我想知道这个问题是否应该作为dojo的trac中的错误输入...
答案 1 :(得分:0)
这是一个快速而又肮脏的解决方法:在评估CnEY时,问题是DataGrid将自身重置为0行,然后再次使用数据填充自己。
如果使用具有网格高度最小高度的DIV封装DataGrid,则重置不会影响页面的高度,因此“跳转”将停止。
当然,这只是一个基本的解决方法,因为即使用JavaScript设置/更改了周围DIV的高度也有些静态,所以我宁愿选择动态的东西(作为CnEY发布的解决方案)。