jquery.widget是挂件,通过挂件模式挂载在jquery对象上,其实本质上也就是用了$.fn.extend和$.extend的扩展。

http://blog.sina.com.cn/s/blog_4a60ba9c01014dea.html

Jquery ui 提供了一些基本的widget,但是他提供了很好的机制来创建widget。在jquery css framework中包含了基本的css样式(视觉和感觉诸如颜色,字体大小,图标等),而在ui的css中,则需要定义构建widget结构的css,比如margin,padding,position等。在开发widget的时候也要尽量遵循这一原则,这样才能很好的利用jquery theme roller来应用样式,从而在整体上保持一致,在前面的文章中简单的 介绍了jquery css framework。下面就简单的介绍下jquery ui 的开发指引

Jquery的官方文档中对此写的很清晰。一般来说,jquery ui都是继承自jquery.ui.widget.js这个文件的。这个文件提供了一个工厂方法来创建widget对象。其方法是$.widget(String name, Options prototype).下面简单介绍下这个类提供的方法和属性。在创建widget的时候将重写这些。

destroy():将widget实例从dom对象上移除,在开发widget的时候一般此方法是必须的。就是移除你自己在dom element上添加的样式和行为以及dom结构

options:在这里面保存的是widget的配置信息,在创建widget的时候需要设置一些配置参数。

element:就是widget作用的dom对象。

enable()和disable()这两个方法就是禁用和启用widget的。其实是修改options.disabled。

还有两个私有方法是创建widget的时候要重写的。

_create() 这个方法就是创建widget的方法,在页面调用widget的时候,就会执行此方法,来构建widget。Widget的绝大大多数行为和结构都是在这里创建的。

_init() 这个方法大多数时候不会被重写,这个方法在构建widget的时候在_create后执行。从相关的文档上查询到:

_create()方法在widget构建的时候执行,而_init()方法在构建和重新初始化的时候执行。而destroy方法则是在移除widget的时候被执行。在widget中,所有的私有方法都将加以"_"前缀

_setOption():此方法提供了options的属性的设置,一般情况下如果options里面的参数不需要特殊处理(校验,类型转换,以及设置属性的时候触发某一操作等)的时候不需要对此方法进行重写

事件

如果有自定义的事件,可以采用widget为我们封装好的方法来处理_trigger()这个方法来处理,其调用方法 this._trigger(type, event, data),第一个参数为时间类型,第二个参数为事件event对象,第三个参数为事件要传递的参数。

  • 例如:

//此widget是将textbox进行修饰一下的。自身没有css,采用的是jquery ui css framework的样式
(function ($) { //ui默认采用jquery的ui前缀,后面的是widget名称
$.widget("ui.textboxdecorator", { //此widget中没有options
options: {},
_init: function () { //验证是否是需要装饰的元素

if (!(this.element.attr("tagName").toLowerCase() === "input" || this.element.attr("tagName").toLowerCase() === "textarea")) {
return;
}
if (!(this.element.attr("type").toLowerCase() === "text" || this.element.attr("type").toLowerCase() === "password")) {
if (this.element.attr("tagName").toLowerCase() === "input") return;
}
//this.element也就是调用此widget的元素
var e = this.element;
//ui-widget widget基本的样式,ui-state-default。默认状态的样式;ui- corner-all 圆角(基于css3,ie下不起作用)
this.element.addClass("ui-widget ui-state-default ui-corner-all");
//添加hover效果和active效果
this.element.mouseover(function () {
e.addClass("ui-state-hover");
}).mouseout(function () {
e.removeClass("ui-state-hover");
}).mousedown(function () {
e.addClass("ui-state-active");
}).mouseup(function () {
e.removeClass("ui-state-active");
});
},
//销毁时,移除widget增加的样式
destroy: function () {
this.element.removeClass("ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active");
}
})
})(jQuery)

在使用该widget的时候,需要引用jquery,jquery.ui.core.js,jquery.ui.widget.js文件,css文件需要jquery.ui.core.css和jquery.ui.theme.css两个文件。在调用的时候采用$("***"). textboxdecorator();来调用此widget。

  • jQuery编写widget的一些窍门

  1. 在编写widget的时候,一般我们需要绑定一些事件,最好将这些widget的绑定事件加上当前widget的命名空间。如果同一个jQuery对象,使用了两个widget,而两个widget都绑定了相同的事件名称,可能会出现问题。在销毁widget的时候,去除绑定事件也很方便,只需要unbind(”.namespace“)就可以了。

  2. 在写jQuery的时候,因为jQuery对象是支持连写的。譬如:$(obj).css("height","20px").attr("title","abc")....

作者:大吉大利今晚学习
链接:http://www.imooc.com/article/75699
来源:慕课网

最新文章

  1. PHP 装饰器模式
  2. 【转】 解读EOF
  3. linux设备驱动
  4. hdu 2007 - 平方和与立方和
  5. linux下利用curl监控网页shell脚本
  6. Dwarves (有向图判环)
  7. 微服务架构下分布式Session管理
  8. kettle作业(job)调用转换,设置变量,写日志到数据库中【转】
  9. 28个MongoDB NoSQL数据库的面试问答
  10. 【DP专辑】ACM动态规划总结
  11. hdu1255 覆盖的面积 线段树+里离散化求矩形面积的交
  12. OpenStack和Hadoop的区别
  13. Django中的可复用模板
  14. 工作随笔—Java容器基础知识分享(持有对象)
  15. day11_python_1124
  16. web前端开发浅析
  17. android sqlite 数据唯一性
  18. ArrayList原理(一)
  19. 花1台的钱入手2台【最能抗DDoS】阿里云主机【攻略】
  20. An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL'

热门文章

  1. 向net core 3.0进击——多平台项目发布与部署
  2. sql server 利用存储过程http请求调用URL链接访问方法
  3. cisco路由器telnet及设置用户名和密码的几种方式
  4. Airflow使用指南
  5. Spark原理分析目录
  6. delimiter关键字
  7. ETF参数:现金替代标志
  8. OpenLDAP + phpLDAPadmin
  9. Windows下编译Redis5.0.5
  10. 测试函数——python编程从入门到实践