重新加载网格存储时如何停止滚动到顶部 - 采取 2
How do you stop scrolling to top when grid store is reloaded - take 2
我有一个使用 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 - 但这似乎工作正常。
基本上只是声明一些可以从文件中的任何地方看到的全局变量——一个是标志,表示触发重新加载的事件已经发生(rowClicked),一个表示最后已知的位置滚动条
var rowClicked = false;
var prevScrollPosition = -1;
当事件发生时将触发 re-load - 将全局变量 rowClicked 设置为 true
rowclick: function(grid, rowIndex, event) {
rowClicked = true;
然后在网格的侦听器中使用 rowClicked 变量来确定何时 re-position 滚动条。
listeners : {
bodyscroll: function(sl, st) {
if (rowClicked) {
getScenarioLineOrderNumbersGrid().getView().scroller.scrollTo('top',prevScrollPosition);
rowClicked = false;
}
prevScrollPosition = st;
}
Kludgy - 但它有效。
我有一个使用 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 - 但这似乎工作正常。
基本上只是声明一些可以从文件中的任何地方看到的全局变量——一个是标志,表示触发重新加载的事件已经发生(rowClicked),一个表示最后已知的位置滚动条
var rowClicked = false;
var prevScrollPosition = -1;
当事件发生时将触发 re-load - 将全局变量 rowClicked 设置为 true
rowclick: function(grid, rowIndex, event) {
rowClicked = true;
然后在网格的侦听器中使用 rowClicked 变量来确定何时 re-position 滚动条。
listeners : {
bodyscroll: function(sl, st) {
if (rowClicked) {
getScenarioLineOrderNumbersGrid().getView().scroller.scrollTo('top',prevScrollPosition);
rowClicked = false;
}
prevScrollPosition = st;
}
Kludgy - 但它有效。