我正在使用Esri的API中的featureTable dgrid。它本质上是一个dojo onDemandGrid。每当我滚动到网格的右侧并单击任何单元格或行时,网格始终会一直向后滚动到起始位置的左侧。我知道网格对象中有一个布尔'keepScrollPosition'属性。
**doesn't work**
this.featureTable.grid.refresh({ keepScrollPosition: true });
**sets keepScrollPosition to 'true' but still continues to scroll back left when cell or row is clicked**
this.featureTable.grid.set({ keepScrollPosition: true });
**I tried setting the keepScrollPosition at the grid instance but doesn't seem to be working either**
this.featureTable = new FeatureTable({
featureLayer: this.featureLayer,
map: this.initData.mapController.map,
columns: this._getColumns(this.featureLayer),
grid: { keepScrollPosition: true }
}, "qr" + e.item.id);
我经历了很多论坛并做了一些广泛的研究,似乎无法让网格保留它的滚动位置。我甚至尝试在每次渲染网格时手动设置{x,y}滚动位置,但它似乎总是刷新,清除并重置它的滚动位置。我相信这可能是道场内的一个错误,但如果有人能告诉我这个卷轴问题的解决方案,我将不胜感激。谢谢。
答案 0 :(得分:0)
我遇到了同样的问题。 首先,我认为你指定“grid:{keepScrollPosition:true}”的方式无效。其次,我还没有看到任何方法来设置 有效的此属性。我认为Esri不允许访问此功能。
我的hacky解决方法是这样做:
featureTable.grid.on(".dgrid-header .dgrid-cell:click", _headerClicked);
function _headerClicked(event){
var scroller = $(".MyContainerClassName .dgrid-scroller");
if (scroller.length) {
scroller = scroller[0];
var oldscrollpos = scroller.scrollLeft;
scroller.onscroll = function (evt) {
console.log("oldscrollpos:", oldscrollpos);
scroller.scrollLeft = oldscrollpos;
scroller.onscroll = null;// disable this callback so user can go back to real scrolling
}
}
}
我应该补充一下,在我的情况下,滚动仅在用户对列进行排序时发生,所以这里只能通过单击列标题来调用scroll-fix。听起来你需要在更多的事件上触发它而不是那个。