EasyUI1.4.2 DataGrid二次加载的问题

最近在使用EasyUI1.4.2的DataGrid的过程中,发现了两个会二次加载的情况; 第一个是在页面初始化的时候,如果给datagrid指定了URL属性,而且pageNumber属性没有设置为1的时候,,就会出现二次加载的情况。 第二个是条件查询的时候,填上条件之后,直接点击分页栏的左右按钮,这个时候,会产生两次请求,第一次请求是正常的带条件的请求,第二次请求是请求URL属性设置的地址,最后表格中的数据也是请求URL属性设置的地址返回的结果。

解决方案: 第一个问题比较好解决,将pageNumber设置为1就可以了,这个地方的原因如下: 在EasyUI1.4.2源码中的_612函数,这个函数的主要作用就是获取表格需要的数据,同步 DataGrid和Pagination的相关信息; 函数如下:

//data是表格的data,是getData函数的返回值//_64b就是DataGrid对象function _612(_64b,data){var _64c=$.data(_64b,”datagrid”);var opts=_64c.options;var dc=_64c.dc;data=opts.loadFilter.call(_64b,data);data.total=parseInt(data.total);_64c.data=data;if(data.footer){_64c.footer=data.footer;}if(!opts.remoteSort&&opts.sortName){var _64d=opts.sortName.split(“,”);var _64e=opts.sortOrder.split(“,”);data.rows.sort(function(r1,r2){var r=0;for(var i=0;i<_64d.length;i++){var sn=_64d[i];var so=_64e[i];var col=_5e0(_64b,sn);var _64f=col.sorter||function(a,b){return a==b?0:(a>b?1:-1);};r=_64f(r1[sn],r2[sn])*(so==”asc”?1:-1);if(r!=0){return r;}}return r;});}if(opts.view.onBeforeRender){opts(opts.view,_64b,data.rows);}opts(opts.view,_64b,dc.body2,false);opts(opts.view,_64b,dc.body1,true);if(opts.showFooter){opts(opts.view,_64b,dc.footer2,false);opts(opts.view,_64b,dc.footer1,true);}if(opts.view.onAfterRender){opts(opts.view,_64b);}_64c.ss.clean();var _650=$(_64b).datagrid(“getPager”);if(_650.length){var _651=_650.pagination(“options”);if(_651.total!=data.total){//pagination的refresh就是用传入的参数对象的属性覆盖pagination对象的对应属性_650.pagination(“refresh”,{total:data.total});//opts是datagrid的属性,_651是pagination的options对象if(opts.pageNumber!=_651.pageNumber&&_651.pageNumber>0){opts.pageNumber=_651.pageNumber;//_64b就是那个表格对象_611(_64b);}}}_5af(_64b);dc.body2.triggerHandler(“scroll”);$(_64b).datagrid(“setSelectionState”);$(_64b).datagrid(“autoSizeColumn”);opts.onLoadSuccess.call(_64b,data);};

原因就是pagination对象的pageNumber在表格第一次加载的时候,是1,DataGrid的pageNumber属性这个时候还是我们设置的属性,这两个属性在下面这段代码里同步,在这还没有同步:

if(opts.pageNumber!=_651.pageNumber&&_651.pageNumber>0){opts.pageNumber=_651.pageNumber;//_64b就是那个表格对象_611(_64b);}

在_611这个函数中,会再一次请求服务器,所以我们就是不让代码走进这个循环,也就是让opts.pageNumber==_651.pageNumber即可。 初次加载时。pagination的pageNumber属性是1,只要我们把DataGrid的pageNumber属性也设置为1,这样DataGrid初次加载的时候就不会二次请求了。 这里顺便看下_611函数:

/**_6e1是表格对象 * _6e2是queryParams */{var opts=$.data(_6e1,”datagrid”).options;if(_6e2){opts.queryParams=_6e2;}var _6e3=$.extend({},opts.queryParams);if(opts.pagination){$.extend(_6e3,{page:opts.pageNumber||1,rows:opts.pageSize});}if(opts.sortName){$.extend(_6e3,{sort:opts.sortName,order:opts.sortOrder});}if(opts.onBeforeLoad.call(_6e1,_6e3)==false){return;}$(_6e1).datagrid(“loading”);{$(_6e1).datagrid(“loaded”);$(_6e1).datagrid(“loadData”,data);},function(){$(_6e1).datagrid(“loaded”);opts.onLoadError.apply(_6e1,arguments);});if(_6e4==false){$(_6e1).datagrid(“loaded”);}};幸福就是重复。每天跟自己喜欢的人一起,通电话,

EasyUI1.4.2 DataGrid二次加载的问题

相关文章:

你感兴趣的文章:

标签云: