导言

在日常开发中经常会用到列表,相信用过easyui,Ext等很多,的确很强大,但想修改确实也不容易,我也用了几年的easyui,有时间时会想一下,自已随然没有前端的精湛技术,但可以在有这些技术的开源框架上封装一下组成自已的控件,方便又好上手,扩展容易。

我们经常用Layer弹窗控件,今天也用他家的分页控件layPage和都熟悉的腾讯的模板引擎artTemplate还有老牌Jquery封装一个小的datagrid功能简单够用就好,方便扩展用到功能再加

代码

/*
*基于Jquery 和 artTemplate 封装的列表控件
*可实现分页和无分页列表,功能单一欢迎大家补充
* Date: 2015-04-28
datagrid = $("#eTable").datagrid({
//pageIndex: 1,
//pageSize: 10,
//queryParams: $("#search").serialize(),
url: "/Layui/GetJson",
pagination: "pagination",
scriptHtml: "eTableHtml",
table: "eTableRow",
isPagination: true,
//onLoadSuccess: function (data) {
// //alert(data);
//}
});
*/
(function ($) {
function init(options, obj) {
function getParam() {
var param = "pageIndex=" + opts.pageIndex + "&pageSize=" + opts.pageSize;
param = param + "&" + opts.queryParams;
return param;
}
function queryForm() {
var cells = document.getElementById(opts.table).rows.item(0).cells.length;
if (opts.isPagination) {
document.getElementById(opts.pagination).innerHTML = "";
}
var trStr = "<tr><td colspan=" + cells + " style='text-align:center'>{0}</td></tr>";
obj.html(trStr.replace("{0}", "<img src='/Scripts/datagrid/images/loading.gif'/>数据正在加载中..."));
var url = opts.url + "?ts=" + Math.random();
$.post(url, getParam(), function (result) {
if (result.list.length == 0 || typeof (result.list.length) == "undefined") {
obj.html(trStr.replace("{0}", "<img width='18' src='/Scripts/datagrid/images/smiley_027.png'/>没有查询到您想要的数据"));
return;
}
data.list = result.list;
var html = template(opts.scriptHtml, data);
obj.html(html);
if (result.totalCount > 0 && opts.isPagination) {
totalCount = result.totalCount;
pageInitialize(opts.pagination, opts.pageIndex, opts.pageSize, result.totalCount);
}
callbackFun();
});
} function pageInitialize(pageID, pageIndex, pageSize, totalCount) {
laypage({
cont: pageID, //容器。值支持id名、原生dom对象,jquery对象。【如该容器为】:<div id="page1"></div>
pages: Math.ceil(totalCount / pageSize), //通过后台拿到的总页数
curr: pageIndex, //初始化当前页
jump: function (e, first) { //触发分页后的回调
opts.pageIndex = e.curr;
if (!first) { //一定要加此判断,否则初始时会无限刷新
queryForm();
}
}
});
} function callbackFun() {
if (opts.onLoadSuccess != null) {
opts.onLoadSuccess();
}
} var defaults = {
pageSize: 10,
pageIndex: 1,
queryParams: "",
pagination: "",
scriptHtml: "",
table: "",
url: "",
isPagination: false,
onLoadSuccess: null
} var opts = $.extend(defaults, options);
var data = new Array();
var totalCount;
queryForm(); var method = {};
return method.getPageIndex = function () {
return this.pageIndex;
},//当前页刷新
method.onReload = function () {
queryForm();
},//重新加载
method.onLoad = function () {
opts.pageIndex = 0;
queryForm();
},
method.getData = function () {
return data;
},
method.getTotalCount = function () {
return totalCount;
},
method
} $.fn.datagrid = function (options) {
return init(options, $(this));
}
})(jQuery)

用法

    <table class="table table-compress mb20" id="eTableRow" width="800">
<thead>
<tr>
<th width="50%">ID</th>
<th width="50%">Name</th>
</tr>
</thead>
<tbody id="eTable"></tbody>
</table>
<div class="page" id="pagination">
</div> <script id="eTableHtml" type="text/html"> {{each list as value i}}
<tr>
<td width="50%" style="text-align:center"><span class="font-arial">{{value.Name}}</span></td>
<td width="50%" style="text-align:center">{{value.Address}}</td>
</tr>
{{/each}} </script> <script type="text/javascript">
$(function () {
datagrid = $("#eTable").datagrid({
//pageIndex: 1,
//pageSize: 10,
//queryParams: $("#search").serialize(),
url: "/Layui/GetJson",
pagination: "pagination",
scriptHtml: "eTableHtml",
table: "eTableRow",
isPagination: true,
//onLoadSuccess: function (data) {
// //alert(data);
//}
}); }); </script>
</body>

注:支持单页多列表多分页

Jquery+artTemplate+layPage 封装datagrid的更多相关文章

  1. jQuery EasyUI教程之datagrid应用(二)

    上次写到了让数据库数据在网页datagrid显示,我们只是单纯的实现了显示,仔细看的话显示的信息并没有达到我们理想的效果,这里我们丰富一下: 上次显示的结果是这样的 点击查看上篇:jQuery Eas ...

  2. jQuery EasyUI教程之datagrid应用(一)

    最近一段时间都在做人事系统的项目,主要用到了EasyUI,数据库操作,然后抽点时间整理一下EasyUI的内容. 这里我们就以一个简洁的电话簿软件为基础,具体地说一下datagrid应用吧 datagr ...

  3. jQuery EasyUI教程之datagrid应用(三)

    今天继续之前的整理,上篇整理了datagrid的数据显示及其分页功能 获取数据库数据显示在datagrid中:jQuery EasyUI教程之datagrid应用(一) datagrid实现分页功能: ...

  4. jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)

    上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...

  5. Jquery Ajax简单封装(集中错误、请求loading处理)

    Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...

  6. [jQuery]我的封装笔记

    jQuery封装插件开发入门教程: http://www.awaimai.com/467.html 一.默认值和选项 jQuery.extend函数解释 extend(dest,src1,src2,s ...

  7. jQuery EasyUI API - Grid - DataGrid [原创汉化官方API]

    最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...

  8. jQuery对象插件封装步骤

    jQuery是js的一个非常优秀的库,它大大简化了js的很多操作,并且解决了js的大部分兼容性问题.甚至很多css兼容性问题,用jQuery写都能解决. 这里是对象插件的封装.当然,封装插件很多,这里 ...

  9. JQuery分页插件封装(源码来自百度,自己封装)

    最近由于项目的需要,做了一个基于JQuery的表格分页插件封装,部分源码来源百度,经由自己封装完成. 下面是具体代码和说明,仅供参考.第一步可以先将我的HTML,CSS,JS这三部分的代码创建好后先运 ...

随机推荐

  1. 线状DP(石子归并)

    题意:有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动相邻的2堆石子合并,合并花费为新合成的一堆石子的数量.求将这N堆石子合并成一堆的总花费最小(或最大). dp[i][j]为从i到j的 ...

  2. Java中FileOutputStream和FileInputStream使用例子

    package a.ab; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.F ...

  3. 让谷歌浏览器 chrome 支持小于12px的字体

    webkit的私有属性:{-webkit-text-size-adjust:none;} 但是,在最新版的谷歌里.已经不在支持这个属性啦. 用css3的transform:scale()缩放大小,但是 ...

  4. mybatis异常

    一.Invalid bound statement 1.mapper.xml中namespaces错误(***) 2.方法不存在 3.方法返回值错误 二.Mapped Statements colle ...

  5. ORACLE 中NUMBER 类型 低精度转换成高精度

    例如: 表User中有一个字段 salary  Number(10,3), 如果想把字段salary的类型提高精度到salary  Number(10,6),保留六位小数, 解决办法:1,ALTER ...

  6. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  7. css3写的实用表单美化

    <!DOCTYPE html> <!--[if IE 7 ]> <html lang="en" class="ie7"> & ...

  8. 打包解决方案后,安装时提示只能在IIS5.1以上运行解决方法

    环境:vs2010 sp1,mvc4,WIN10 生成安装项目后进行安装提示: 此安装程序需要Internet Information Server 5.1或更高版本和Windows XP和更高的安装 ...

  9. [Xamarin] 使用LayoutInflater.Inflate載入預先設計好的Layout並使用 (转帖)

    開發的時候,一定會把一些東西設計成元件,並且可以多次使用,今天紀錄一篇比較簡單的方法,可以載入事先做好的Layout 並且給予事件 介紹一下範例: Main.axml: <?xml versio ...

  10. ServiceStack.Redis之IRedisClient<第三篇>

    事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...