我有一个使用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
预先感谢
答案 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-但是有效。