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

时间:2014-08-23 11:19:43

标签: extjs extjs4

以前,我使用persistent网格插件,直到我发现它导致了一些可怕的减速 - 大约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也无效。不过,网格滚动到其视图的最顶部。

修改

嗯,事实证明,focusRowgrid.store.sync电话而无效。所以,我把这个例程放在sync回调函数中,现在它正在运行。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

尝试以下代码

grid.getView().focusRow( record ); 

答案 2 :(得分:1)

试试这个:

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