Dojo 网格刷新和滚动位置
Dojo grid refresh and scroll position
我在 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();
这个网格右边有一个滚动条,我想保留滚动条的位置。但是当我刷新时,它会滚动回顶部。
如何保持滚动位置?
尝试抓取包含网格的 <div>
对象并获取当前滚动位置:
var elmnt = document.getElementById("myDIV");
var x = elmnt.scrollLeft;
var y = elmnt.scrollTop;
保存位置然后刷新网格。刷新完成后,恢复滚动位置:
var elmnt = document.getElementById("myDIV");
elmnt.scrollLeft = x;
elmnt.scrollTop = y;
我认为在这种情况下滚动值将位于 <div>
对象上。如果没有,请在您的 Web 浏览器中使用 inspect element
,同时将鼠标指针悬停在您想要的滚动条上。这应该允许您找到需要保存和恢复滚动的元素。
如果在 CGI 类型环境中刷新整个页面,您可以将这些值作为 URL 参数传递以完成相同的事情。
如果您使用 OnDemandGrid
,它支持 keepScrollPosition
属性,您可以在网格实例上定义它以影响所有 refresh
调用,或者在调用 refresh
时专门传递(例如 grid.refresh({ keepScrollPosition: true })
)。
如上所述,keepScrollPosition
是您使用 OnDemandGrid
时的解决方案。
如果您使用的是 dgrid/Grid
,则不支持 keepScrollPosition
。
这就是我解决跳跃滚动条问题的方法(这适用于水平和垂直滚动条):
Grid
有一个方法 getScrollPosition()
。通过在 refresh()
之前调用此方法,您可以保存两个滚动条的位置并在刷新完成后跳回它们。代码应如下所示:
var scrollpos = myGrid.getScrollPosition();
myGrid.refresh();
myGrid.scrollTo(scrollpos);
此解决方案的一个限制是旧的 IE 浏览器,存在明显的来回跳转。
我在 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();
这个网格右边有一个滚动条,我想保留滚动条的位置。但是当我刷新时,它会滚动回顶部。
如何保持滚动位置?
尝试抓取包含网格的 <div>
对象并获取当前滚动位置:
var elmnt = document.getElementById("myDIV");
var x = elmnt.scrollLeft;
var y = elmnt.scrollTop;
保存位置然后刷新网格。刷新完成后,恢复滚动位置:
var elmnt = document.getElementById("myDIV");
elmnt.scrollLeft = x;
elmnt.scrollTop = y;
我认为在这种情况下滚动值将位于 <div>
对象上。如果没有,请在您的 Web 浏览器中使用 inspect element
,同时将鼠标指针悬停在您想要的滚动条上。这应该允许您找到需要保存和恢复滚动的元素。
如果在 CGI 类型环境中刷新整个页面,您可以将这些值作为 URL 参数传递以完成相同的事情。
如果您使用 OnDemandGrid
,它支持 keepScrollPosition
属性,您可以在网格实例上定义它以影响所有 refresh
调用,或者在调用 refresh
时专门传递(例如 grid.refresh({ keepScrollPosition: true })
)。
如上所述,keepScrollPosition
是您使用 OnDemandGrid
时的解决方案。
如果您使用的是 dgrid/Grid
,则不支持 keepScrollPosition
。
这就是我解决跳跃滚动条问题的方法(这适用于水平和垂直滚动条):
Grid
有一个方法 getScrollPosition()
。通过在 refresh()
之前调用此方法,您可以保存两个滚动条的位置并在刷新完成后跳回它们。代码应如下所示:
var scrollpos = myGrid.getScrollPosition();
myGrid.refresh();
myGrid.scrollTo(scrollpos);
此解决方案的一个限制是旧的 IE 浏览器,存在明显的来回跳转。