gpt4 book ai didi

sorting - 当排序更改时,dojo datagrid 将使页面变为 "jump"

转载 作者:行者123 更新时间:2023-12-02 10:51:56 24 4
gpt4 key购买 nike

我的一个页面中有一个 Dojo Datagrid(其中包含更多内容),并且出现以下问题:只要我单击列标题来更改排序,页面就会跳转,就像我单击了某些内容一样HTML anchor 。

有趣的是,页面跳转将使网格仅显示跳转后的前两行,而不是(例如)让网格在跳转后从页面顶部开始,这是如果 anchor 的预期行为已使用。

该问题出现在不同的浏览器中(测试过:Firefox 3.6、Opera 10、IE6),所以我猜测这可能是一个 Dojo-problem/-bug。

有什么办法可以阻止这种烦人的行为吗?

您好,选择0r

PS:this似乎描述了类似的问题,仅适用于 JQuery(不幸的是也没有解决方案)

最佳答案

DataGrid 和底层 _Grid 中有多种力量在起作用,这些力量可能导致网格在两次提取之间缩小到其标题行的高度,然后重新增长。如果您在滚动到页面底部时遇到您所具体描述的行为,则您的浏览器可能会“向上滚动”(以便其视口(viewport)的底部与页面的新底部对齐),但是当表格加载新数据并再次调整大小,您的浏览器仍然“向上滚动”。

我花了一些时间研究 DataGrid 和 _Grid。我发现确实有两个原因:

  1. DataGrid 的 _clearData 函数,它调用 updateRowCount(0)(即将网格减少到 0 行,直到新结果出现)

  2. _Grid 的 _resize 函数,如果 _autoHeight 为 true,则将其viewsNode 的高度样式设置为 ''(如果 autoHeight 为 true,或者是一个 >= rowCount 的数字,则似乎是这种情况)

    <

如果您不反对弄乱源代码,您可以简单地从 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 跟踪中的错误输入...

关于sorting - 当排序更改时,dojo datagrid 将使页面变为 "jump",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2476622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com