我在Dojo中有一个网格,
var myGrid = new (declare([Grid, DijitRegistry]))({
store: myStore, // this is a Observable(Memory())
columns:[
{field: "field1", label: "A", sortable: false},
{field: "field2", label: "B", sortable: false},
{field: "field3", label: "C", sortable: false},
{field: "field4", label: "D", sortable: false},
{field: "field5", label: "E", sortable: false}
],
selectionMode: "single",
cellNavigation: true,
queryOptions: {
sort:[{attribute: "field1", descending: true}]
}
},
myDomRef
);
有时我需要刷新网格
myGrid.refresh();
这个网格在右边有一个滚动条,我想保留滚动条的位置。但是当我刷新时,它会滚动回顶部。
如何保持滚动位置?
3条答案
按热度按时间b1zrtrql1#
如果使用
OnDemandGrid
,它支持keepScrollPosition
属性,您可以在网格示例上定义该属性以影响所有refresh
调用,或者在调用refresh
时专门传递该属性(例如grid.refresh({ keepScrollPosition: true })
)。rlcwz9us2#
尝试抓取包含网格的
<div>
对象并获取当前滚动位置:保存位置,然后刷新网格。刷新完成后,恢复滚动位置:
我认为滚动值应该在
<div>
对象上,如果没有,在浏览器中使用inspect element
,同时将鼠标指针放在你想要的滚动条上,这样你就可以找到需要保存和恢复滚动的元素。如果在CGI类型环境中刷新整个页面,则可以将这些值作为URL参数传递来完成相同的操作。
avkwfej43#
如上所述,
keepScrollPosition
是您使用OnDemandGrid
时的解决方案。如果您使用的是
dgrid/Grid
,则不支持keepScrollPosition
。这就是我解决滚动条跳跃问题的方法(这适用于水平滚动条和垂直滚动条):
Grid
有一个方法getScrollPosition()
。通过在refresh()
之前调用这个方法,你可以保存两个滚动条的位置,并在刷新完成后跳回到它们。代码应该如下所示:这种解决方案的一个局限性是旧的IE浏览器会有明显的来回跳转。