公司框架用的jqGrid,复习一遍读源码的过程
前面的初始化流程就不说了,直接从populate方法开始,这是填充数据的方法。
完整的方法就不截了,只截主要的片段。
dt = ts.p.datatype.toLowerCase();
switch(dt)
{
case "json":
case "jsonp":
case "xml":
case "script":
$.ajax($.extend({
url:ts.p.url,
type:ts.p.mtype,
dataType: dt ,
data: $.isFunction(ts.p.serializeGridData)? ts.p.serializeGridData.call(ts,ts.p.postData) : ts.p.postData,
success:function(data,st, xhr) {
if ($.isFunction(ts.p.beforeProcessing)) {
if (ts.p.beforeProcessing.call(ts, data, st, xhr) === false) {
endReq();
return;
}
}
if(dt === "xml") { addXmlData(data, rcnt,npage>1,adjust); }
else { addJSONData(data, rcnt, npage>1, adjust); }
$(ts).triggerHandler("jqGridLoadComplete", [data]);
if(lc) { lc.call(ts,data); }
$(ts).triggerHandler("jqGridAfterLoadComplete", [data]);
if (pvis) { ts.grid.populateVisible(); }
if( ts.p.loadonce || ts.p.treeGrid) {ts.p.datatype = "local";}
data=null;
if (npage === 1) { endReq(); }
},
error:function(xhr,st,err){
if($.isFunction(ts.p.loadError)) { ts.p.loadError.call(ts,xhr,st,err); }
if (npage === 1) { endReq(); }
xhr=null;
},
beforeSend: function(xhr, settings ){
var gotoreq = true;
if($.isFunction(ts.p.loadBeforeSend)) {
gotoreq = ts.p.loadBeforeSend.call(ts,xhr, settings);
}
if(gotoreq === undefined) { gotoreq = true; }
if(gotoreq === false) {
return false;
}
beginReq();
}
},$.jgrid.ajaxOptions, ts.p.ajaxGridOptions));
break;
这里就是根据表格的参数设置,去发起ajax请求获取远程数据。
dt是你的dataType,我们是json,然后会进入到addJSONData方法。顾名思义,就是添加json数据。。。。。。
我在addJSONData方法里找到了这个:
if (!more) { ts.updatepager(false,true); }
点进去,在方法最底部
if(dnd && ts.p.jqgdnd) {
$(ts).jqGrid('gridDnD','updateDnD');
}
$(ts).triggerHandler("jqGridGridComplete");
if($.isFunction(ts.p.gridComplete)) {
ts.p.gridComplete.call(ts);
}
$(ts).triggerHandler("jqGridAfterGridComplete");
gridComplete被调用。
然后回到最开始的populate方法,addJSONData执行完
接着调用了loadComplete方法。(lc就是loadComplete)
结论:gridComplete -> loadComplete