日积月累系列之分页控件(js源码)

最近开发了一款分页控件,分享给大家。

主要功能和界面介绍

cform分页控件支持服务端分页、客户端分页、数据过滤、数据排序等功能。

源码介绍

cform-pager分页控件主要由三部分组成:css、scripts以及index.html,css主要是用于控制分页和列表的样式;scripts主要是负责分页数据抓取、分页控件、本地缓存、数据过滤、数据排序等功能;index.html则涉及了分页数据模板、分页容器以及相应的过滤、排序按钮。

scripts介绍

scripts目录下面包含了cform-main、cform-utils、cform-cache以及涉及到的外围插件requirejs与jquery,下面我们分别介绍各个js的功能。

cform-main是整个分页控件的入口,负责调用分页控件cform-pager。

cform-pager提供了主要的分页控件功能。

cform-utils提供了分页控件所涉及的功能性函数。

cform-cache提供了本地分页、过滤、排序功能。

除此之外,分页控件采用了模块化开发方法,所以引入了requirejs;也使用了jquery作为功能性插件的补充。

模板介绍

cform-pager分页控件除了本身的分页功能之外,还提供了分页模板,以便开发者快速的构建分页和列表。cform-pager提供的模板是简单的模板方法,就是通过替换模板里面的关键字(通过对需要替换字段的左右两边增加##分割符来识别关键字)来实现数据的填充。

举个“栗”子:

比如我们的后台数据返回的数据格式是这样的:

{ data: [ { id:1, name: "张三", age: 27 }, { id:1, name: "李四", age: 28 }, { id:1, name: "王五", age: 29 } ] , rowsCount:3 }

而我们的列表模板是这样的

 <tr>
    <td>##id##</td>
    <td>##name##</td>
    <td>##age##</td>
 </tr>

那么最终渲染出来的结果就是这样的:

 <tr>
    <td>1</td>
    <td>张三</td>
    <td>27</td>
    <td>2</td>
    <td>李四</td>
    <td>28</td>
    <td>3</td>
    <td>王五</td>
    <td>29</td>
 </tr>

好,这是最基本的模板,当然我们可以允许你有足够的想象力去完成你手头的工作。

再举个“栗”子:

比如,现在你需要在姓名里面增加一个超链接,链接到当前人名的详情页面中去,那么这个模板怎么定义呢?

其实,我们用如下方法就可以实现:

 <tr>
    <td>##id##</td>
    <td><a href="/user?id=##id##">##name##</a></td>
    <td>##age##</td>
 </tr>

看清楚了吗?是不是很简单?OK,其实我们并不需要很复杂的模板技术,利用cform-pager就可以完成很多基础的列表页面的构建。

大家想想,还有其他的功能可以扩展吗?当然有,比如,我们可以在td里面追加样式,来识别不同类型的人名;也可以通过对td绑定事件来实现业务功能。再次我就不多举栗子了~

最后,如果如果你发现无论怎么扩展当前的模板都完成不了你的工作时候,该怎么办呢?yes,没错,我们有大招在呢。

这大招究竟是什么呢?

此处省略一万行...

就是callback, 没错,就是回调函数,最终cform可以利用回调函数,把你所需的数据通过callback函数返回给你,任你处置,是不是很爽~~~

调用方法

cform-pager调用十分简单,只需要通过requiresjs引入cform-pager这个组件即可。

require.config({
    paths: {
        jquery: "jquery-1.7.1.min"
    }
});

require(["jquery", "cform-pager"], function ($, pager) {
    //调用cform-pager
    var obj = new pager({ pager: "#pager", container: "#table", url: "data/product.json", pageSize: 12, useCache: true });

    //过滤产品名称为Geitost的数据
    $("#filter1").click(function () {
        obj.filter({ filter: { ProductName: "Geitost" } });
    });
    //过滤产品名称为Konbu的数据
    $("#filter2").click(function () {
        obj.filter({ filter: { ProductName: "Konbu" } });
    });
    //按产品ID正序排列
    $("#order1").click(function () {
        obj.filter({ order: { ProductID: "asc" } });
    });
    //按产品ID倒序排列
    $("#order2").click(function () {
        obj.filter({ order: { ProductID: "desc" } });
    });
});

参数说明

名称 中文 默认值 备注 required
obj 分页容器   对象可以为class或id yes
container 对象容器   对象必需为id yes
url 取数地址   必传参数,切返回值必需为json格式 yes
callback 回调函数 默认回调函数通过外部模板来加载数据 可选参数,用于处理和呈现返回的分页数据 no
pageIndex 起始页码 1 可选参数,默认值为1 no
pageSize 分页大小 30 可选参数,默认值为30 no
params 扩展参数   可选参数,请求分页url的时候,会一同提交到服务器 no
align 分页位置 center 可选参数,设置分页位置:left、center、right no
showLoading 是否显示loading true 可选参数,默认是显示loading no
rowsCount 总记录数 -1 可选参数,所查询的总记录数,-1表示需要服务端生成rowsCount no
useCache 启用本地分页 false 可选参数,是否启用本地分页 no

演示与下载

查看DEMO DEMO下载

欢迎访问:cform官方网站:http://www.cform.cn 演示地址:http://demo.cform.cn (用户名:001 密码123)

欢迎访问:cform开源组件:http://www.cform.cn/SinglePage?t=0103

时间: 2024-10-24 17:11:41

日积月累系列之分页控件(js源码)的相关文章

MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码里,只要你踏下心去看,一切就都有了! Knockout.Validation.js是为Knockout插件服务的,它可以为Knockout对象进行验证,就像你使用MVC模型验证 一样,而这种绑定的验证方式对于开发人员来说是很容易接受的,也是一种趋势,它在验证过程中,会将出现异常的点记录下来,然后在

日积月累系列之国籍控件(js源码)

一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家. 主要功能和界面介绍 国籍控件主要支持中文.英文过滤以及键盘上下事件. 源码介绍 国籍控件核心是两个文件,navtionality.js 和 mian.css.navtionality.js主要功能是国籍控件的DOM构建以及相应的事件绑定:main.css主要是用于渲染国籍控件的样式.而main.js是国籍控件的调用方法. HTML结构 国籍控件要呈现在页面上,必须事先在页面中加以设置以供控件加载使用.control-nat

Android下拉刷新控件SwipeRefreshLayout源码浅析

SwipeRefreshLayout是Android官方的下拉刷新控件,使用简单,界面美观,不熟悉的朋友可以随便搜索了解一下,这里就不废话了,直接进入正题. 这种下拉刷新控件的原理不难,基本就是监听手指的运动,获取手指的坐标,通过计算判断出是哪种操作,然后就是回调相应的接口了.SwipeRefreshLayout是继承自ViewGroup的,根据Android的事件分发机制,触摸事件应该是先传递到ViewGroup,根据onInterceptTouchEvent的返回值决定是否拦截事件的,那么就

开源日历控件DatePicker源码解析

在一些项目开发中,会使用日历去标识事务,所以根据美工出的效果图,我们可以采用不同的方法去实现.比如通过GridView扣扣你敢.自定义View实现日历控件,这些都是我们解决问题的手段,我也实现过一个自定义日历控件(Android自定义控件之日历控件55993)),由于我只是粗糙的进行实现,并没有进行过多的在控件的可扩展性上进行打磨设计,所以在本篇文章中,我秉着学习的态度分析下爱哥的鼎力巨作DatePicker-DatePicker. DatePicker开源项目地址:[https://githu

Extjs 5.x 日期时间控件DateTime源码

/** * Created by jiawenjun on 2016/8/5. */Ext.define('Ux.picker.DateTime', { extend: 'Ext.Component', requires: [ 'Ext.XTemplate', 'Ext.button.Button', 'Ext.button.Split', 'Ext.util.ClickRepeater', 'Ext.util.KeyNav', 'Ext.fx.Manager', 'Ext.picker.Mon

超强封装的RichTextBox控件(C#源码)

有点类似QQ聊天框所带的RichText. 功能进行了RTF的封装,直接调用函数插入图片,连接,特列文字.具体请查看代码 ExRichTextBox_src

【干货】再上数据分页控件 ━ 更加灵活,更加实用-提供源码

再上数据分页控件-更加灵活,更加实用 关于数据分页的文章太多了,各有各的一套方案,但大多都很类似,要么使用存储过程,要么直接使用代码进行分页.各种方案分页的效率也不尽相同,我们不一定要找一个最高效的(根据实际的项目情况),找一个最合适的就OK了.下面我要谈的分页控件非常灵活,可以支持任意类型的数据库,同时可以支持存储过程或代码分页(会自动判断),也支持多表的分页,非常的方便.对于数据分页的相关文章,在我的博客中可以找到很多,下面我做一个简单的汇总,方便大家查阅. 1. 原创企业级控件库之大数据量

Duilib 学习源码系列1-创建控件

好了,昨天研究出了为什么加载xml结束以后我在自己新建一个控件位置不能调整,原来要先add才能调属性. 本来这个是昨天的任务,虽然这块内容是前天就看完的,权当边写边复习吧. 上一篇提到 <VerticalLayout name="window" bkcolor="#FFFFFFFF" bkcolor2="#FFAAAAA0" bkcolor3="#00000000"> 代表了一个控件字符串; 上次忘记说了 及时经过

使用amaze ui的分页样式封装一个通用的JS分页控件

作为一名码农,天天百度.偶尔谷歌,所有代码全靠copy,用第三方插件,偶尔也想着造造轮子,毕竟自己的骨肉总归比较亲. 今天有点空闲时间,想起我们公司之前套的页面的分页插件上还有bug,而写那个分页插件的小伙子已经离职,就决定自己来写一个. 首先,肯定是用我们的妹子UI做样式效果,毕竟开发妹子少,做的东西能和妹子沾点边,就沾一点,毕竟妹子比较好看. 然后 开始吧 第一步 找到妹子UI的分页HTML代码,一共有2种,我喜欢第一种,比较有颜 这是妹子UI的分页代码 <ul data-am-widget