ajax分页控件(旧) - smallp/front-suit GitHub Wiki
使用ajax获取数据,渲染到页面中。适用于后台数据分页展现,可以渲染到table、li等多种标签中,有很强的灵活性。尤其适用于筛选项多的情况。
在id等符合规范的情况下,一句Pager.init();
即可完成所有工作。详情请参阅参数说明。
服务器端返回的数据结构为{"total":1,"data":[]}
。其中totol
为总页码数,data
为数据数组。在不需要分页的场合,也可以直接返回data
,即[]
。
<table>
<thead>
<tr>
<th>序号</th>
<th>ID</th>
<th>手机号</th>
<th>昵称</th>
</tr>
</thead>
<tbody id="data">
</tbody>
</table>
对应的模板可以为:
<template id="item">
<tr>
<td>{index}</td>
<td>{id}</td>
<td>{phone}</td>
<td>{name}</td>
</tr>
</template>
如果要兼容旧版浏览器,那么建议使用下面的方法:
<script id="item" type="text/template">
<tr>
<td>{index}</td>
<td>{id}</td>
<td>{phone}</td>
<td>{name}</td>
</tr>
</script>
初始化如下:
$(function(){
param={
tpl:$('#item').html(),
target:'data',
fun:function(data){
for(x in data){
data[x].index=x+1;
}
return data;
}
}
Pager.init(param);
});
其中fun是一个函数,函数返回处理完成之后的数据。
实例中添加了序号一栏,那么在模板字符串中指定index的位置,在fun中给数据添加上index属性即可。所以添加、修改字段等都可以通过此方法来实现,解决此控件模板没有控制功能的缺陷。(**这是由于此控件没有依赖模板引擎所引起的。**相对引入模板引擎所带来的开销,这种方式更为干净一些,而且大多数情况下都可以轻松解决问题,少数情况通过hack的方法也能解决。故而没有采用模板引擎。)
详情请参见参数说明。
- url:数据获取的路径,默认为当前路径。
- tpl:模板字符串。默认情况下会读取ID为item的标签下的内容。建议将模板内容放在
<template>
标签中(此为HTML5标签,只适用于现代浏览器)。如要考虑兼容性请使用<script type="text/template">
。渲染数据请使用大括号,如服务器端传的单条数据为{"id":1,"name":"hello"}
,那么模板字符串为<tr><td>{id}</td><td>{name}</td></tr>
,则最后渲染出来的字符串为<tr><td>1</td><td>hello</td></tr>
。 - target:容纳数据的容器ID。默认取tbody标签,如果有多个table或使用其他标签容纳数据,请使用此参数。
- fun:渲染数据前的处理函数。默认为null。由于没有使用模板引擎,所以不支持在模板内进行判断,需要在此函数中对数据进行处理。处理完成后需要将数据return出来,交给控件渲染数据。
-
reload:(reset:bool)
reset是可选参数,如果reset为true,会直接跳转到第一页。在筛选项有改动的情况下,建议使用此参数。否则为单纯刷新数据。 -
next:()
下一页 -
pre:()
上一页 -
addParam:(key:string,value:any)
添加请求参数,不会自动刷新数据。 -
delParam:(key:string)
删除请求参数,不会自动刷新数据。 -
getRow:(key:string,value:any)
根据唯一键值对搜索数据。如请求回来的数据有{"id":1,"name":"hello"}
,那么PAGER.getRow('id',1)
可以返回此条数据。 注:目前只能返回唯一数据,不支持返回多条数据