Sorting DojoDataGrid将使页面;“跳跃”;更改排序时
我的一个页面(包含更多内容)中有一个Dojo Datagrid,出现了以下问题:只要我单击列标题更改排序,页面就会跳起来,就像我单击了某个HTML锚一样 有趣的是,页面跳转将使网格仅显示跳转后的前两行,而不是(例如)在跳转后将网格从页面顶部开始,这是使用锚定时的预期行为 这个问题出现在不同的浏览器中(经过测试:Firefox 3.6、Opera 10、IE6),所以我想这可能是Dojo问题/-bug 有什么办法让这种讨厌的行为停止吗 您好, 选择0rSorting DojoDataGrid将使页面;“跳跃”;更改排序时,sorting,datagrid,dojo,Sorting,Datagrid,Dojo,我的一个页面(包含更多内容)中有一个Dojo Datagrid,出现了以下问题:只要我单击列标题更改排序,页面就会跳起来,就像我单击了某个HTML锚一样 有趣的是,页面跳转将使网格仅显示跳转后的前两行,而不是(例如)在跳转后将网格从页面顶部开始,这是使用锚定时的预期行为 这个问题出现在不同的浏览器中(经过测试:Firefox 3.6、Opera 10、IE6),所以我想这可能是Dojo问题/-bug 有什么办法让这种讨厌的行为停止吗 您好, 选择0r PS:似乎描述了一个类似的问题,只针对JQu
PS:似乎描述了一个类似的问题,只针对JQuery(不幸的是,也没有解决方案)在DataGrid和底层网格中有两种力量在起作用,它们可以导致网格在抓取之间收缩到其标题行的高度,然后重新增长。如果您在滚动到页面底部时遇到您特别描述的行为,您的浏览器可能会“向上滚动”(以便其视口的底部与页面的新底部对齐),但当表格加载新数据并再次调整大小时,您的浏览器仍会“向上滚动” 我花了一些时间在DataGrid和_Grid周围挖掘。我发现了两个原因:
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;
希望它能有所帮助,或者至少提供一些见解。我想知道这个问题是否应该作为一个bug输入dojo的trac…这里有一个快速而肮脏的解决方法:正如CnEY评估的那样,问题是DataGrid将自身重置为0行,然后再次填充数据 如果用最小高度为网格高度的DIV包围DataGrid,则重置不会影响页面的高度,因此“跳跃”将停止
当然,这只是一个基本的解决方法,因为即使使用JavaScript设置/更改,周围DIV的高度也有点静态,所以我更愿意使用动态的方法(如CnEY发布的解决方案)。您能提供一些代码/详细信息来使用网格吗?您是否已附加到网格上的任何事件?网格中的数据是否应用了任何特殊格式?我已经广泛使用了网格,但我从未见过这种行为,因此了解您的不同之处会有所帮助。请加载页面,并确保URL末尾没有“#”。单击标题后,是否添加了“#”?如果是这样,听起来标题链接并没有阻止默认操作。你有一个示例页面吗?@Donal:我已经连接到“onStyleRow”,但就是这样,其余的看起来像
var grid=new dojox.grid.DataGrid({'store':store,'structure':structure,'autoHeight':true,'autoWidth':true(…)
,没有特殊之处。@Nick:点击标题将保持URL不变(没有“#”)添加。遗憾的是,我无法提供示例页面,因为网格是一个相当复杂的内部项目的一部分。从代码中删除“autoHeight”似乎可以消除“跳跃”“,但我看到的唯一东西是标题,因此这不是选项。由于所需的高度变化很大,固定高度也没有用。我们发现重置DataGrid是一个需要关注的问题,同时找到了一个解决方法(请参阅我的答案),但您的解决方案肯定是受欢迎的(即使我还没有尝试过,但很快就会尝试)。非常感谢!我想这是因为你设定了一个悬赏,但它在你标记它之前就过期了。我承认我离悬赏的最后期限很近,所以我真的没想到会得到它;)如果它最终对你有用,那么我很高兴它对你有帮助。