我的页面有两个部分,一个form和一个iframe。form提交表单,action为a.jsp。
a.jsp与数据库交互,得到数据,一条条通过Store.insert方法插入,GridPanel加载数据源,渲染后,返回HTML到父页面的iframe中。
因为查询数据库有一段时间,所以我在form提交前,通过js调用,parent.ExtWaitSerach(1)方法,从而保证页面上会有一个loading图标。在a.jsp 中,我为GridPanel添加了监听事件,afterrender(),目的是想在GridPanel渲染后,调用
parent.ExtWaitSerach(0),让loading图标消失。
正常来讲,应该先让随着loading图标的消失,GridPanel应该马上显示数据。但是当GridPanel加载很多数据的时候,如200条(我觉得不算多啊),就过有一段时间才显示数据。感觉像延迟一样。试了很多办法。无果。希望大家可以讨论讨论。我想要求教的就是,当GridPanel数据加载过后,应该触发什么事件,此时我在调用parent.ExtWaitSerach(0)让loading图标消失就达到目的。希望在这里可以找到答案。效果如下图:
查询时:查询后:
a.jsp与数据库交互,得到数据,一条条通过Store.insert方法插入,GridPanel加载数据源,渲染后,返回HTML到父页面的iframe中。
因为查询数据库有一段时间,所以我在form提交前,通过js调用,parent.ExtWaitSerach(1)方法,从而保证页面上会有一个loading图标。在a.jsp 中,我为GridPanel添加了监听事件,afterrender(),目的是想在GridPanel渲染后,调用
parent.ExtWaitSerach(0),让loading图标消失。
正常来讲,应该先让随着loading图标的消失,GridPanel应该马上显示数据。但是当GridPanel加载很多数据的时候,如200条(我觉得不算多啊),就过有一段时间才显示数据。感觉像延迟一样。试了很多办法。无果。希望大家可以讨论讨论。我想要求教的就是,当GridPanel数据加载过后,应该触发什么事件,此时我在调用parent.ExtWaitSerach(0)让loading图标消失就达到目的。希望在这里可以找到答案。效果如下图:
查询时:查询后:
解决方案 »
- 求一款开源!免费。的web前端UI框架。最好是基于jquery的
- js图片翻书的效果 帮忙看看
- JS调用HTML 中文变成问号 谁可以帮忙解决?
- 我想实现是线与不在线显示不同图片.如何加一个if语句,请各位指导!
- js怎么实现QQ,MSN有消息时在任务栏闪动的效果呢?
- 请问怎么实现点击链接时,将该链接的目标文件保存至本机上?在线等候,即时结帖,谢谢!
- 如何在onmouseout2秒后触发一些事件?
- 按钮提交表单时,加入表单提交目标位置?onclick="form1.submit();"怎么加?
- js 动态设置A标签href后不跳转问题,求解答,,急急急急急急急急急急急急
- js离开页面提示,但是点击确定不需要提示
- js获取指定url页面的标题,求解。
- js 调用xmpp方法(能解决再加100分)
new Ext.grid.GridPanel({
loadMask: true
});另外,你想数据加载完后触发事件,这样写就可以:
store.on('load', function () {
//这个函数会在数据加载完后触发
});
并不是说你让loading图标消失数据就显示,是查询数据的时候。数据没有加载完毕就一直显示loading图标的
你也可以控制loading图标的,在beforeload的时候显示图片,在load回调事件中隐藏或是删除图标即可
你说你数据一条一条的insert进去,这样当然是很慢了。你可以将数据一次性返回,用loadData(data);
设置进去,或是查询的时候直接reload,带上你查询的参数即可完成查询的。
grid.getEl().mask('Loading...');//添加loading,在beforeload或是insert数据时候调用
grid.getEl().unmask();//删除loading,在数据插入完毕或是load回调函数中调用
你说的loadMask我有试过,但是因为我的页面布局里,Grid是显示在iframe里的,如果loadMask就只会显示在iframe中,这样子页面就很不好看。而且,loadMask是指Grid加载store时显示遮蔽,但是我的store是从内存中读取的,时间很快,所以根本不会显示load图标或是一闪而过吧。请看第二张图,分页下标,数据已经读取出来了,但是Grid没有渲染数据。
store 有任何数据改变,load remove insert 之类都会 fire 各种event ,造成gridview去做各种更新gridview 画200条数据的速度取决于列的个数,看你的grid貌似后面还有很多列。一般的机器render 10个列200条数据完全不应该卡,除非碰到小霸王学习机。
之所以要用事件,是因为整个store.load过程是异步的,如果你是数据读到本地然后loadData进去,完全是同步的,也就不需要用事件,直接在loadData之后把那个消息提示去掉就ok还是推荐用 loadMask 来做这个消息提示
我这边数据10W+
每页50条,2000多页
就开始加载数据的时候得等个5秒左右
loading...一消失,数据马上出来你说的这个情况没遇到过用的就是loadMask:true
那你就直接添加
grid.getEl().mask('Loading...');//添加loading,在你插入数据或是loadData数据的地方调用
setTimeout(function () {
grid.getEl().unmask();//删除loading,用setTimeout 5秒后删除
}, 5*1000);
1. gridview 刷新
2. loadMask的hideMask
照你说的表现来看是 先调用了 2, 然后再调用的1,也就说明他先绑定的 2 事件,然后再绑定的1, 如果改一下绑定顺序呢?
initEvents : function(){
Ext.grid.GridPanel.superclass.initEvents.call(this); if(this.loadMask){
this.loadMask = new Ext.LoadMask(this.bwrap,
Ext.apply({store:this.store}, this.loadMask));
}
},
在gridpanel.js 里可以搜到关于loadMask的这段绑定,所以你可以不给grid的构造函数里传loadMask:true, 而是在 new 完grid之后,人工创建loadMask, 比如
var myGrid = new Grid(...);
grid.loadMask = new Ext.LoadMask(grid.bwrap, Ext.apply.....);
未经测试,只是一种想法