jquery.jqGrid源码改造

后端列表接口原会返回列表数据及总条数等,现为提高接口性能将其拆分为两个接口来分别获取数 据与总条数。

发布代码

npm run build :压缩混淆代码,生成 jquery.jqGrid.min.js 文件。

改造内容

jquery.jqGrid.src.js中可通过搜索#update#字符来定位改造内容位置。

$.fn.jqGrid 方法初始化 jqGrid 时,如果数据源为接口提供的json数据,则会根据 参数判断是否需要分开请求数据。

this.listGrid.jqGrid({
	url: EduBoss.serviceApi.findTwoTeacherClassTwoList,

	// 新增参数totalUrl,为请求总数接口
	// 当只需要请求数据时,请求参数会带上 getTotal = false
	// 当需要请求总数时,请求参数会带上 getTotal = true
	totalUrl: EduBoss.serviceApi.findTwoTeacherClassTwoList,

	datatype: "json",
	postData: submitParam,
	contentType: "application/x-www-form-urlencoded; charset=utf-8",
	height: 'auto',
	colNames: [...],
	colModel: [...],
	rowNum: EduBoss.rowNum,
	rowList: EduBoss.rowList,
	pager: '#pagination',
	sortname: 'CREATE_TIME',
	toolbarfilter: true,
	viewrecords: true,
	sortorder: "desc",
	autowidth: false,
	// 分组
    groupingView: {
      groupField: ['groupId'],
      groupSummary: [true],
      // 统计数据
      groupColumnShow: [true],
      groupCollapse: false
    },
	loadComplete: function (data) {},
	gridComplete: function () {},
});

$.fn.jqGrid中跟数据请求相关的代码在其populate方法中

迭代历史

2019-03-29

jqGrid初始化时有配置groupingView.groupColumnShow: [true]时,在数据更新的过程中会进行数据统计,上个迭代将数据请(列表与中条数)求拆分为2个异步处理的过程,这会导致在渲染数据统计的时候重复渲染(当总条数比列表响应慢的情况下会发生)。

  1. 改造响应成功回调对LoadCompleteAfterLoadComplete事件的处理机制(列表与总条数最晚响应的那个会触发事件);
  2. 改在addJSONData方法,增加参数notRenderGroup来决定是否会渲染数据统计;

2019-02-25

前面2个版本的处理都是等数据跟总条数的请求都响应完之后再渲染列表,现在将数据及总数分开渲染;

  1. 不使用$.when().then(),直接2个$.ajax()并列请求,谁先响应处理就先处理谁的代码;

2019-02-20

由于上个版本未考虑到还有用户在使用winXp系统上的Chrome49浏览器,导致ES6的代码不能正确执行。

  1. 使用jq的$.when().then()代替Promise.all().then(),并将其他ES6改为ES5的代码;
  2. 将打包用的uglify-es换成uglify-js

2019-01-15

  1. 使用ES6的Promiselet...等语法改写请求数据的相关代码;
  2. 使用uglify-es打包代码;