关于jqGrid:探索gridComplete和loadComplete的执行顺序

公司框架用的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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jqGrid 是一个基于 jQuery 的表格插件,`jsonReader` 和 `loadComplete` 都是 jqGrid 的参数,用于解析和处理返回的 JSON 数据。 `jsonReader` 用于指定 jqGrid 如何解析返回的 JSON 数据。其语法如下: ```javascript jsonReader: { root: "rows", page: "page", total: "total", records: "records", repeatitems: false, id: "id" } ``` `root` 表示 JSON 数据中存放表格行数据的数组的名称,`page` 表示当前页数,`total` 表示总页数,`records` 表示总记录数,`repeatitems` 表示是否允许重复的名称出现在 JSON 数据中,`id` 表示唯一标识行数据的名称。 `loadComplete` 用于在表格数据加载完成后执行自定义的回调函数。其语法如下: ```javascript loadComplete: function(data) { // 自定义回调函数 } ``` 在回调函数中,可以对返回的数据进行处理,比如根据数据中的某些字段值来修改表格行的样式或者内容等。 例如,以下代码示例将表格中 `age` 字段大于 30 的行的字体颜色设置为红色: ```javascript loadComplete: function(data) { var grid = $("#myGrid"); var rows = grid.jqGrid("getRowData"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (parseInt(row.age) > 30) { grid.jqGrid("setRowData", row.id, null, {color: "red"}); } } } ``` 在 `loadComplete` 回调函数中,首先使用 `getRowData` 方法获取表格中所有行的数据,然后遍历所有行数据,如果 `age` 字段的值大于 30,就使用 `setRowData` 方法修改该行的样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值