重新加载网格存储时如何停止滚动到顶部-拍摄2

时间:2019-05-16 22:45:49

标签: extjs extjs3

我有一个使用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

预先感谢

1 个答案:

答案 0 :(得分:0)

这有点混乱-也许最好的策略就是不使用旧版本的ExtJS-但这似乎还可以。

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

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-但是有效。