嘿,我需要能够将我的ExtJS网格滚动到当前选择,但不知道如何做到这一点。我在论坛中发现了一个关于ensureVisible方法的引用,但是找不到任何信息。有人可以提出任何建议吗? 感谢
答案 0 :(得分:9)
不幸的是,从ExtJS 4中删除了ensureVisible()。我发现最直接的解决方案是使用scrollIntoView()。就我而言,这是在根据我加载的值选择行之后。
var rowIndex = store.find('fieldName', value);
grid.getSelectionModel().select(rowIndex);
Ext.fly(grid.getView().getNode(rowIndex)).scrollIntoView();
这将显示网格底部的选定行。需要做更多的工作才能将它放在网格的顶部或中间。
答案 1 :(得分:9)
这似乎也有效:
grid.getView().focusRow(rowIdx);
答案 2 :(得分:5)
这似乎也有效:
grid.getView().getRow(rowIdx).scrollIntoView();
答案 3 :(得分:4)
在ExtJS 6上为我工作,即使打开了bufferedRenderer。
var record = grid.getSelectionModel().selected.getRange()[0];
grid.getView().focusRow(record);
答案 4 :(得分:3)
这似乎也有效
grid.getView().getNode(rowIndex).scrollIntoViewIfNeeded();
对于ExtJs 4.X无需使用Ext.fly
答案 5 :(得分:2)
对不起,我真的很蠢。我刚尝试了EnsureVisible,它运行正常。
答案 6 :(得分:1)
为了节省大量的头发,你应该知道如果打开网格 bufferedRenderer ,此线程中用于滚动到视图的解决方案将不工作。
据我所知,在Ext JS 5中,默认情况下会启用bufferedRenderer。
在我意识到这一点之前我花了几个小时。
grid.getView()。如果索引行在缓冲行之外,则getNode(rowIndex)将返回NULL。
答案 7 :(得分:0)
至少在4.2中,如果你在bufferedRenderer中的缓冲范围之外,则使用scrollIntoViewIfNeeded
会失败。 bufferedRenderer有一个方便的scrollTo
方法来帮助完成这项任务:
grid.getView().bufferedRenderer.scrollTo(index, true);
滚动到并选择在总数据集中选择指定的行索引。
http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.grid.plugin.BufferedRenderer-method-scrollTo