jQuery 插件开发——GridData(表格)
导读:我个人认为做开发最幸福的事之一就是设计一套属于自己的控件,老早之前就想去做这样的事情,一直碍于事件的冲突和个人的想法,最终没有定论,最近难得抽出一些空隙,去完成这件事情。其实自定义控件并不是难事,很多人也都有这个实力去做,可能也是因为现在的开源控件太多的缘故吧,很多人都喜欢用第三方的,例如|:jquery ui,easy ui等等一些开源控件。但是又有多少去了解这些控件的具体实现呢?大部分的程序猿只是一味的去使用,为了好看而使用,为了方便而使用,使用人家的规则。大家不要误会,我写这些不是为了鄙视那些使用这些控件的人(我也一直在使用),我只是想说明,我们不用临渊羡鱼,我们自己也可以按照需求自己去设计一套属于自己的控件。今天我只是想将自己设计过程中的一些思想说下,希望对一些想自己去扩展控件的人有一点微薄的帮助,同时也算是对自己这几天想法的一个回馈吧。
扯淡就先扯到这里,下面看具体的实现过程。
使用jquery控件去设计一套自己的控件,首先要连接扩展方法。即jQuery为开发插件提拱了两个方法,分别是:jQuery.fn.extend();jQuery.extend();如果不了解的可看下这边博客(http://www.cnblogs.com/newsouls/archive/2011/10/27/2226849.html),简单易懂。当然有很多文章写这两个扩展方法的,按自己的理解去看。
这篇文章我写的是Table控件,起名为GridData,当然名字你可以按自己的喜好,随意取,只要自己喜欢就好。当然建议有点规范^_^,你懂的。
我首先设计这个GridData控件的思想就是:只要在页面上定义个table 标签,加个id,即可,其他都由jquery实现扩展。
其实比较好的设计规范是在table中加<thead></thead>,<tbody></tbody>,<tfoot></tfoot>来将table分成三部分。这三部分作用我就不去细说了,因为懂html语言的人都知道。我在table中自定义了一个属性datagrid,因为我不想所有都操作ID,并且定义这个属性,以后可以根据需求的改变去扩展(自定义属性,想必大家都很熟悉了)。
自定控件,主要任务在于自定义控件的属性,样式和注册事件(这里的注册事件是为了写分页的)。我是通过这样的一个结构去实现这个控件的:
第一步、扩展一些自定属性(作用是可以自己设置一些常用的样式,这部分我建议要,当然如果你不喜欢也可以去掉)
$.extend({
///说明:
/// 选择皮肤(设计不同需求的样式)
pSkin: {
skin1: function () {
},
skin2: function () {
}
},
///说明:
/// 分页详细信息
pPage: {
PageCount: 10, //总页数
PageSize: 10, //每页显示个数
CurrentPage: 1 //当前页
},
///说明:
/// 每一行自定义属性trId的值
pTrIdCollection: {
tr:
[ //格式
//{
// tr_No: 0,
// tr_Key: 0,
// tr_Value: "ess"
//}
]
},
///说明:
/// 设置table头部的字体颜色
pTHeadColor: {
},
///说明:
/// 设置table头部的背景颜色
pTHeadBgColor: {
},
...
});
第二步、使用上面的自定属性和样式(这部分定义的是table 属性、样式 定义,按照具体的需求去定义和扩展)
///作用:
/// table 属性、样式 定义
$.extend({
GridData: {
TWidth: 700,
THeadColor: $.pTHeadColor.Default,
THeadBgColor: $.pTHeadBgColor.Default,
THeadBgImgUrl: "",
THeadHeight: 30,
THeadStyle:"",
TTHeadCols:null,
...
}
});
第三步、具体实现创建表格(包括创建Table、分页、多选行功能,给列添加样式(这个功能还是比较新的,其他的好像很少有哦,只要我没注意^_^)等)
///参数说明:
/// id: table 的 id
/// data:数据源,用于放到tbody中的数据
(function ($) {
$.fn.GridData = function (para) {
//参数定义
var id;
var data;
//解析参数
if (typeof (para.id) == "undefined") {
return;
}
if (typeof (para.data) == "undefined") {
return;
}
id = para.id;
data = para.data;
//初始化
TInitialize(id, footId);
//创建table head
CreateTableHead(id);
//创建table body
CreateTableBody(id, data);
//选择是否分页
if ($.GridData.TBoolPage) {
CreateTableFoot(footId);
}
//设置属性和样式
SetTableAttribute(id, footId);
//选择是否显示多选按钮
if ($.GridData.TBoolCheckbox) {
AddCheckbox(id);
}
//注册事件
RegisterEvent(id);
};
})(jQuery);
第四步:具体方法实现(为了使代码简洁,我建议将一些方法封装起来,不要都一股脑写在一起,这样会使代码结构不清晰,自己看的吃力,别人当然就更不用说了,这样还有利于改错和扩展)
///作用:
/// 注册事件
function RegisterEvent(id){}
///说明:
/// 初始化,每次加载数据前必须先
function TInitialize(id, footId){}
///说明:
/// 创建头部
function CreateTableHead(id){}
///说明:
/// 创建table body
function CreateTableBody(id,data){}
///说明:
/// 创建table foot
function CreateTableFoot(footId){}
///说明:
/// 添加多选框
function AddCheckbox(id){}
///说明:
/// 设置属性、样式
function SetTableAttribute(id,footId){}
/// 说明:
/// 跳转到首页
function FirstPage(){}
/// 说明:
/// 跳转到上一页
function LastPage(){}
/// 说明:
/// 跳转到下一页
function NextPage(){}
/// 说明:
/// 跳转到末页
function FinalPage(){}
/// 说明:
/// 跳转到跳到某一页
function JumpPage(pageNumber){}
第五步:当然是使用了啊:我现在的使用方式如下
//设置列
$.GridData.THeadCols = [
[
{ field: 'ID', title: '产品编号', width:150, align: 'center', sortable: true },
{ field: 'ProductName', title: '产品名称', width: 150, align: 'center', sortable: true },
...
]
];
$("#aa").GridData({
id:"aa",
data:objList
});
我写的这里的使用还不算是很简洁,我接下来会在修改将列也封装到GridData中,这个很简单。也看个人喜好,其实我感觉这样也还行,分开就清晰一点,写在一起也紧凑些,看个人喜好了^_^
好了,限于篇幅,只能将设计思想写出来了,如果想要源码私Q我:296319075,或是留言,随意!同时也希望大家有什么好的想法,不吝赐教,谢谢!
jQuery 插件开发——GridData(表格)的更多相关文章
- jQuery 插件开发——GridData(表格)第二版
开发背景 表格插件之前我也写个一篇,当时写那个插件的时候,我自己还没有总结出写插件的方法,虽然功能实现了,但是使用起来还是有点别扭的,并且需要在调用写添加特定名称的方法,这个地方着实违背了开发插件的易 ...
- jquery插件开发
jQuery是一个封装的很好的类,比如我们用语句$("#btn1") 会生成一个 jQuery类的实例. 一.jQuery插件开发注意要点 1.使用闭包,避免全局依赖,避免第三方破 ...
- JavaScript学习笔记(四)——jQuery插件开发与发布
jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...
- JavaScript学习总结(四)——jQuery插件开发与发布
jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...
- jQuery插件开发精品教程,让你的jQuery提升一个台阶
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- jQuery插件开发(溢出滚动)
声明:此程序仅针对手机端,简单的封装一个插件,意在记载插件的开发过程,如有错误及不足之处,还望即时指出. 移动开发的时候,我们经常会遇到滑动事件,众所周知手机端滑动主要依靠touch事件.最近接连遇到 ...
- 从零开始学jQuery插件开发
http://www.w3cfuns.com/notes/19462/ec18ab496b4c992c437977575b12736c.html jQuery 最成功的地方,是它的可扩展性,通过吸引了 ...
- jquery插件开发继承了jQuery高级编程思路
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- jQuery插件开发(转)
jQuery插件开发全解析 jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命 ...
随机推荐
- C++语言对C的增强(1)——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符
1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.变量检测加强 在C语言中,重复定义多个同名的全局变量是合法的: ...
- 学习动态性能表(11)v$latch$v$latch_children
学习动态性能表 第十一篇-(1)-V$LATCH 2007.6.7 Oracle Rdbms应用了各种不同类型的锁定机制,latch即是其中的一种.Latch是用于保护SGA区中共享数据结构的一种串 ...
- Maven错误之 Check $M2_HOME environment variable
Eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is ...
- java中final用法
1.修饰基础数据成员 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰成常量,不可修改. 2.修饰类或者对象的引用的final 在java中我们无法让对象被修饰为final ...
- hihoCoder#1050(树中最长路)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一 ...
- 机器学习:PCA(人脸识别中的应用——特征脸)
一.思维理解 X:原始数据集: Wk:原始数据集 X 的前 K 个主成分: Xk:n 维的原始数据降维到 k 维后的数据集: 将原始数据集降维,就是将数据集中的每一个样本降维:X(i) . WkT = ...
- 杂项:VS调试技巧之附加进程
ylbtech-杂项:VS调试技巧之附加进程 1. 摘录返回顶部 1. 用过VS一段时间的程序员们相信都有过这种调试经历:每次按下F5进行断点调试时,都要等待好长时间:先让解决方式编译通过,然后启动V ...
- AJAX——XMLHttpRequest对象的使用
AJAX是web2.0即动态网页的基础,而XMLHttpRequest对象又是AJAX的核心.XMLHttpRequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据 一. ...
- 问题:oracle字符串函数;结果:Oracle字符串函数
Oracle字符串函数 最近换了新公司,又用回Oracle数据库了,很多东西都忘记了,只是有个印象,这两晚抽了点时间,把oracle对字符串的一些处理函数做了一下整理,供日后查看.. 平常我们用Ora ...
- SQL基础E-R图基础
ER图分为实体.属性.关系三个核心部分.实体是长方形体现,而属性则是椭圆形,关系为菱形. ER图的实体(entity)即数据模型中的数据对象,例如人.学生.音乐都可以作为一个数据对象,用长方体来表示, ...