Extjs 如何滚动到网格中的特定记录?

Extjs 如何滚动到网格中的特定记录?,extjs,extjs4,Extjs,Extjs4,以前,我使用了persistentgrid插件,直到我发现它导致了一些可怕的减速-大约额外3-4秒的网格渲染(约20列300行)。所以,我不想要所有这些插件功能,我唯一想要的就是在网格中滚动到一个选中的记录(可能有很多选中的记录,所以滚动到第一个就足够了)。我试着这样做: .... a lot of code ... rowIndex=grid.store.indexOf(grid.getSelectionModel().getSelection()[0]); record=grid.getSe

以前,我使用了
persistent
grid插件,直到我发现它导致了一些可怕的减速-大约额外3-4秒的网格渲染(约20列300行)。所以,我不想要所有这些插件功能,我唯一想要的就是在网格中滚动到一个选中的记录(可能有很多选中的记录,所以滚动到第一个就足够了)。我试着这样做:

.... a lot of code ...
rowIndex=grid.store.indexOf(grid.getSelectionModel().getSelection()[0]);
record=grid.getSelectionModel().getSelection()[0];
grid.store.remove(record); // <- I remove it, because its content has changed
grid.store.insert(rowIndex,Ext.create('GridModel',json.items[0]));  // <- I insert 
// it back with new values
grid.getSelectionModel().select(  rowIndex  ); // <- This works, I see a checkmark
grid.getView().focusRow( record ); // <- This is not working
....
也不起作用:

Ext.fly(grid.getView().getNode(rowIndex)).scrollIntoView(); // instead of focus
var rowEl=grid.getView().getNode(rowIndex);
rowEl.scrollIntoView(grid.el, false);
那么,用什么来代替焦点呢

编辑

在网格配置中将
deferRowRender
设置为false也没有效果。尽管如此,网格仍会滚动到视图的最顶部

编辑

事实证明,
focusRow
没有效果,因为调用了
grid.store.sync
。所以,我把这个例程放在
sync
回调函数中,现在它开始工作了。

试试下面的代码

grid.getView().focusRow( record ); 
试试下面的代码

grid.getView().focusRow( record ); 
试试这个:

var numIndex=** //this is record  index
var x=grid.getView().getScrollX();
grid.getView().scrollTo(x,numIndex*21); //x,y --> unit is pixel
试试这个:

var numIndex=** //this is record  index
var x=grid.getView().getScrollX();
grid.getView().scrollTo(x,numIndex*21); //x,y --> unit is pixel

在ExtJS4中,解决方案可能是使用方法scrollBy()

在ExtJS5中:尝试方法getScrollable()scrollTo(…)

在ExtJS6中:尝试方法getScrollable()scrollToRecord(…)


尽管在另一个问题上,这篇文章可能很有用:

在ExtJS4中,解决方案可能是使用方法scrollBy()

在ExtJS5中:尝试方法getScrollable()scrollTo(…)

在ExtJS6中:尝试方法getScrollable()scrollToRecord(…)


虽然这篇文章是关于另一个问题的,但它可能很有用:

谢谢你的回答。在发布代码时,请尝试包含简短的解释,以便OP能够理解。谢谢您的回答。在发布代码时,请尝试包含简短的解释,以便OP能够理解。谢谢您的回答。在发布代码时,请尝试包含简短的解释,以便OP能够理解。谢谢您的回答。在发布代码时,请尝试包含简短的解释,以便OP能够理解。