【发布时间】:2016-11-10 05:59:23
【问题描述】:
嘿,我需要能够将我的 ExtJS 网格滚动到当前选择,但不知道该怎么做。我在论坛中看到了一个 ensureVisible 方法的参考,但找不到任何信息。任何人都可以提出任何建议吗? 谢谢
【问题讨论】:
嘿,我需要能够将我的 ExtJS 网格滚动到当前选择,但不知道该怎么做。我在论坛中看到了一个 ensureVisible 方法的参考,但找不到任何信息。任何人都可以提出任何建议吗? 谢谢
【问题讨论】:
这似乎也有效:
grid.getView().focusRow(rowIdx);
【讨论】:
不幸的是,从 ExtJS 4 中删除了 ensureVisible()。我发现最直接的解决方案是使用 scrollIntoView()。就我而言,这是在根据我加载的值选择行之后。
var rowIndex = store.find('fieldName', value);
grid.getSelectionModel().select(rowIndex);
Ext.fly(grid.getView().getNode(rowIndex)).scrollIntoView();
这将在网格底部显示选定的行。需要做更多的工作才能将其置于网格的顶部或中间。
【讨论】:
Ext.fly(grid.getView().getNode(rowIndex)).scrollIntoView();
.scrollIntoView() 在 Ext 4.2 中对我不起作用。幸运的是,返回节点上的一个简单 .focus() 就可以了;)
这似乎也有效:
grid.getView().getRow(rowIdx).scrollIntoView();
【讨论】:
在 ExtJS 6 上为我工作,即使打开了 bufferedRenderer。
var record = grid.getSelectionModel().selected.getRange()[0];
grid.getView().focusRow(record);
【讨论】:
对不起,我真的很笨。我刚刚尝试了 ensureVisible,它工作正常。
【讨论】:
这似乎也有效
grid.getView().getNode(rowIndex).scrollIntoViewIfNeeded();
ExtJs 4.X 的情况下不需要使用Ext.fly
【讨论】:
为了省去很多麻烦,您应该知道,如果打开了网格 bufferedRenderer,此线程中用于滚动到视图中的解决方案将不起作用。
据我了解,在 Ext JS 5 中,bufferedRenderer 是默认开启的。
我花了几个小时才意识到这一点。
如果索引行在缓冲行之外,grid.getView().getNode(rowIndex) 将返回 NULL。
【讨论】:
至少在 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
【讨论】: