使用JQgrid遇到的几个问题

最近在开发中一直在使用JQGrid,官网的打开速度实在是很慢,这里留下一个离线版本的官方API,有些地方有残缺,但是勉强能用:https://yunpan.cn/crUkXZfHwNnt3 (提取码:509f)(采集时间:2015-12)。

以下是一些使用中遇到的问题,记录下来防止以后犯类似的错误。

1.时间格式化问题。

JQGrid默认的时间戳是精确到秒的(主要考虑到对PHP的支持),但JAVA的时间戳是精确到毫秒的,这就造成了时间显示的不正确,经过从网上查找资料采用了修改JQGrid源代码的方式来修复这个问题。

if( !isNaN( date - 0 ) && String(format).toLowerCase() == "u") {  
    //Unix timestamp  
    timestamp = new Date( parseFloat(date)*1000 );  
}
`
1
2
3
4
5
6
7
8
9
10
上面代码中时间戳被乘1000,所以才造成这个问题,只要把它删掉就可以解决了。

今天想想感觉这样的解决方式还是不好,以后版本升级之类的还要去修改源码,可以直接不使用内置的格式化方法,自己写一个formatter将时间转换。

2.单元格插入对象问题。

在JQGrid单元格中插入的都是文本类型的内容,在开发中我需要获取一些不在表格中显示的内容,stackoverflow中有一个回答是将数据放入到userdata中:
<pre>`
userdata : "pagination.list"
`
获取的时候再通过
<pre>`
var data = $("#grid-table").getGridParam('userData');
`
1
2
3
4
5
6
7
8
9
10
11
来获取。但是这样做的问题在于在获取指定数据的时候要对数组进行遍历,如果数据量太大性能不好,今天想到一个解决方法:可以把对象转换成字符串后存入到一个隐藏列中,需要获取的时候在将字符串转换成JSON对象,这样效果应该会更好,年后看看能否用新方法解决。

2016-3-20更新:

对于问题2其实解决方案很简单,在格式化单元格的时候调用自定义方法:
<pre>`
function myformatter ( cellvalue, options, rowObject ){
// format the cellvalue to new format
return new_formated_cellvalue;
}
`
rowObject就可以获取到整行的所有数据。

2016-3-25更新:

3.打开页面后不自动获取数据。

JQGrid在页面加载完成后会自动读取指定数据,如果想手动加载数据可以将datatype:修改为"local",需要读取数据的时候再使用
<pre>`
jQuery("#grid-table").jqGrid('setGridParam',{datatype:'json',url:url,page:1}).trigger("reloadGrid");

进行数据加载。