dGrid продолжает прокручивать влево, и установка keepScrollPosition в true не работает

Я использую FeatureTable dgrid из API Esri. По сути, это додзе 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 ответ

Я с той же проблемой. Во-первых, я думаю, что способ назначения "grid: { keepScrollPosition: true }" недопустим. Во-вторых, я не видел способа установить это свойство, которое является действительным. Я думаю, что Esri не дает доступ к этой функции.

Мой хакерский обходной путь должен был сделать это:

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 вызывается только нажатием на заголовок столбца. Звучит так, как будто вам нужно будет запускать его на большем количестве событий, чем просто.

Другие вопросы по тегам