目的:当加载好grid后,用户想grid定位到指定的某一个行,这时候就需要调用focusRow
代码:grid.getView().focusRow(15)//定位到第16行
现象:IE chrome 测试都可以 但是FF依然会定位到最顶部
结果:经过各种测试以及对比浏览器,然后查看源码总算找到问题的根本原因了。。如下源代码是gridview中的一个私有函数,
虽然没去验证过,但是有现象可以断定,该函数是可以再grid。store。load事件里激发该onload事件,
所以 grid.store.loadData(data);grid.getView().focusRow(15),结合以下源码,自然明了了。 FF下(是GECKO 内核)做了一个事件1mS延迟所以导致我们的代码先执行了focusRow,然后在作用scrollToTop。
源码:onLoad : function() {
if (Ext.isGecko) {
if (!this.scrollToTopTask) {
this.scrollToTopTask = new Ext.util.DelayedTask(this.scrollToTop, this);
}
this.scrollToTopTask.delay(1);
} else {
this.scrollToTop();
}
},
解决方案:1修改源码,(没把握就别这么干了), 2重载该方法,这个酌情可以使用, 3, 最安全的方法 setTimtout(function(){ grid.getView().focusRow(15); },2 )
代码:grid.getView().focusRow(15)//定位到第16行
现象:IE chrome 测试都可以 但是FF依然会定位到最顶部
结果:经过各种测试以及对比浏览器,然后查看源码总算找到问题的根本原因了。。如下源代码是gridview中的一个私有函数,
虽然没去验证过,但是有现象可以断定,该函数是可以再grid。store。load事件里激发该onload事件,
所以 grid.store.loadData(data);grid.getView().focusRow(15),结合以下源码,自然明了了。 FF下(是GECKO 内核)做了一个事件1mS延迟所以导致我们的代码先执行了focusRow,然后在作用scrollToTop。
源码:onLoad : function() {
if (Ext.isGecko) {
if (!this.scrollToTopTask) {
this.scrollToTopTask = new Ext.util.DelayedTask(this.scrollToTop, this);
}
this.scrollToTopTask.delay(1);
} else {
this.scrollToTop();
}
},
解决方案:1修改源码,(没把握就别这么干了), 2重载该方法,这个酌情可以使用, 3, 最安全的方法 setTimtout(function(){ grid.getView().focusRow(15); },2 )