jquery.widget开发(1)

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

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

创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为临夏企业提供专业的网站建设、成都网站制作,临夏网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

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对象,第三个参数为事件要传递的参数。

 

  • 例如:
  1. //此widget是将textbox进行修饰一下的。自身没有css,采用的是jquery ui css framework的样式 
  2. (function($){ 
  3. //ui默认采用jquery的ui前缀,后面的是widget名称 
  4.     $.widget("ui.textboxdecorator", { 
  5. //此widget中没有options 
  6.         options:{ 
  7.         }, 
  8.         _init: function(){ 
  9.             //验证是否是需要装饰的元素 
  10.              
  11.             if (!(this.element.attr("tagName").toLowerCase() === "input" || this.element.attr("tagName").toLowerCase() === "textarea")) { 
  12.                 return; 
  13.             } 
  14.             if (!(this.element.attr("type").toLowerCase() === "text" || this.element.attr("type").toLowerCase() === "password")) { 
  15.                 if (this.element.attr("tagName").toLowerCase() === "input")  
  16.                     return; 
  17.             } 
  18. //this.element也就是调用此widget的元素 
  19.             var e = this.element; 
  20. //ui-widget widget基本的样式,ui-state-default。默认状态的样式;ui- corner-all 圆角(基于css3,ie下不起作用) 
  21.             this.element.addClass("ui-widget ui-state-default ui-corner-all"); 
  22.             //添加hover效果和active效果 
  23.                         this.element.mouseover(function(){ 
  24.                 e.addClass("ui-state-hover"); 
  25.             }).mouseout(function(){ 
  26.                 e.removeClass("ui-state-hover"); 
  27.             }).mousedown(function(){ 
  28.                 e.addClass("ui-state-active"); 
  29.             }).mouseup(function(){ 
  30.                 e.removeClass("ui-state-active"); 
  31.             }); 
  32.         }, 
  33. //销毁时,移除widget增加的样式 
  34.         destroy:function(){ 
  35.             this.element.removeClass("ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active"); 
  36.         }         
  37.     }) 
  38. })(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")....

 


本文标题:jquery.widget开发(1)
标题网址:http://csdahua.cn/article/gdipeg.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流