以前,我使用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也无效。不过,网格滚动到其视图的最顶部。
修改
嗯,事实证明,focusRow
因grid.store.sync
电话而无效。所以,我把这个例程放在sync
回调函数中,现在它正在运行。
答案 0 :(得分:3)
在extjs 4中,解决方案可能是使用方法 scrollBy() http://docs.sencha.com/extjs/4.2.6/#!/api/Ext.Component-method-scrollBy
在Extjs 5中:尝试方法 getScrollable()。 scrollTo(...); http://docs.sencha.com/extjs/5.1.3/api/Ext.grid.Panel.html#placeholder-accessor-getScrollable http://docs.sencha.com/extjs/5.1.3/api/Ext.grid.Panel.html#method-scrollTo
在Extjs 6中:尝试方法 getScrollable()。 scrollToRecord(...); http://docs.sencha.com/extjs/6.2.1/modern/Ext.grid.Grid.html#method-getScrollable http://docs.sencha.com/extjs/6.2.1/modern/Ext.grid.Grid.html#method-scrollToRecord
虽然在其他问题上,这篇文章可能很有用:How to scroll to the end of the form in ExtJS
答案 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