dGrid保持向左滚动并将keepScrollPosition设置为true似乎不起作用

时间:2016-05-25 17:11:23

标签: scroll dojo position esri dgrid

我正在使用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}滚动位置,但它似乎总是刷新,清除并重置它的滚动位置。我相信这可能是道场内的一个错误,但如果有人能告诉我这个卷轴问题的解决方案,我将不胜感激。谢谢。

1 个答案:

答案 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。听起来你需要在更多的事件上触发它而不是那个。