【问题标题】:How do you stop scrolling to top when grid store is reloaded - take 2重新加载网格存储时如何停止滚动到顶部 - 采取 2
【发布时间】:2019-10-04 06:13:06
【问题描述】:

我有一个使用 ExtJS 3.3.0 的应用程序。它使用一个 EditorGridPanel,在重新加载商店后 - 我希望它保留网格的滚动位置,而不是将其发送回顶部。

因为它是 ExtJS 的早期版本 - 这不起作用。

viewConfig: {
   preserveScrollOnRefresh: true
}

我以为我已经根据 Zeke 的建议找到了一个解决方案,可以像这样使用 scrollTo 函数:

//Save position
var top = grid.getView().scrollergetScroll().top;

//Restore position
grid.getView().scroller.scrollTo('top',top);

这很好用——除了重新加载完成后它会直接回到顶部。基本上,如果我不需要在重新加载商店后保留光标位置,这将是一个完美的解决方案。

grid().getStore().reload({
    callback: function (response) {
        //Works at this point
        grid.getView().scroller.scrollTo('top',top);
    }
}

//However the cursor pops right back up to the top after popping out of 
//reload() block

提前致谢

【问题讨论】:

    标签: extjs extjs3


    【解决方案1】:

    这有点笨拙——也许最好的策略就是不要使用旧版本的 ExtJS——但这似乎还可以。

    基本上只声明一些可以从文件中的任何位置看到的全局变量——一个是一个标志,表示触发重新加载的事件已经发生(rowClicked),一个表示滚动条的最后一个已知位置

    var rowClicked = false;
    var prevScrollPosition = -1;
    

    当触发重新加载的事件发生时 - 将全局变量 rowClicked 设置为 true

    rowclick: function(grid, rowIndex, event) {
        rowClicked = true;
    

    然后在网格的侦听器中使用 rowClicked 变量来确定何时重新定位滚动条。

    listeners : {                 
        bodyscroll: function(sl, st) {
            if (rowClicked) {          
                getScenarioLineOrderNumbersGrid().getView().scroller.scrollTo('top',prevScrollPosition);
                rowClicked = false;
            }
            prevScrollPosition = st;                      
        }
    

    Kludgy - 但它有效。

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2016-07-25
      • 2011-03-18
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多