美文网首页
jQuery的widget开发

jQuery的widget开发

作者: 企业信息化架构 | 来源:发表于2020-05-08 11:19 被阅读0次

jQuery插件开发方式

主要有三种:
通过$.extend()来扩展jQuery
通过$.fn 向jQuery添加新的方法
通过$.widget()应用jQuery UI的部件工厂方式创建

$.widget()

使用jQueryUI的widget来写插件,相比于基本的jquery插件有一些好处:

  • 方便实现继承,代码重用
  • 默认是单例
  • widget已经给你实现好的一些常用方法,例如destroy
    案例
(function ($) {
    // utility functions (won’t be inherited)
    function foo() {}
    $.widget('命名空间.插件名', $.继承插件的命名空间.插件名,{ /* snip */ });
})(jQuery);   

写在widget里面的,就有public和private之分,规则是:
public方法首字符不是_
private方法首字符是_

_create _init destroy

widget factory实现了一种单例模式,即不允许在同一个jQuery对象上多次实例化。
当调用$(XX).widgetName()进行初始化的时候,会执行以下代码(源码截取自jquery.ui.widget.js):

var instance = $.data( this, name ); // 从widget自身取出名字为name的数据
if ( instance ) {
    instance.option( options || {} )._init();  // 若该数据已经存在则只调用_init
} else {
    $.data( this, name, new object( options, this ) ); // 若数据还没有则新建一个实例,并将实例保存
}

当调用$(XX).widgetName(‘destroy’)进行销毁的时候,执行以下代码(源码截取自jquery.ui.widget.js):

this.element
    .unbind( "." + this.widgetName )
    .removeData( this.widgetName ); // 删除在create时保存的数据

需要注意的是,destroy方法在jquery.ui.widget.js中是有默认实现的,而_create和_init没有实现。因此如果用自己的方法覆盖destroy,不要忘记调用默认的:

destory: function () {
    console.log('destory');
 
    // call the original destroy method since we overwrote it
    $.Widget.prototype.destroy.call(this);
}

以下示例代码验证_create和_init的区别以及destroy的作用:

var mw = $('#test').myWidget(); // _create  _init
mw = $('#test').myWidget(); // _init
mw.myWidget('destory');
mw = $('#test').myWidget(); // _create  _init

options

选项,在widget中的定义是options,而在调用时是option,注意定义的时候有s,调用的时候没s。
定义:

$.widget( "hui.grid", {
    options: {
        rpOptions: [20, 30, 40], //可选择设定的每页结果数
        title: false,       // 是否包含标题
        minColToggle: 1,    // minimum allowed column to be hidden
        showToggleBtn: false,// show or hide column toggle popup
        hideOnSubmit: true, // 显示遮盖
        showTableToggleBtn: false, // 显示隐藏Grid
        autoload: true,     // 自动加载
        blockOpacity: 0.5,  // 透明度设置
        onToggleCol: false, // 当在行之间转换时
        onChangeSort: false,// 当改变排序时
        preProcess: false,  // 对数据预处理,需要返回数据
        ......
    },  
    _create: function() {
        console.info("2222==lgl2222");
        var opts = this.options;
        console.info(opts);
        if (opts.minpager)
            opts.pagestat = opts.pagestat || '显示{from}到{to},共  {total} 条';
        //添加右键菜单
        if(opts.contextmenu) {
            this._createContextMenu(opts.contextmenu);
        }
        // 用flexigrid实现
        this.element.flexigrid(this.options);
    },
    ......
});

调用:

$('#test').grid('option', 'rpOptions', [20, 30, 40,300]);

相关文章

  • jQuery的widget开发

    jQuery插件开发方式 主要有三种:通过$.extend()来扩展jQuery通过$.fn 向jQuery添加新...

  • IOS Widget 开发笔录

    IOS widget开发笔录 刚完成IOS widget开发,仿照UC头条,头条日报widget,附上效果图: 目...

  • flutter

    1.Widget,、Element、RenderObject?Widget:在Android开发中,TextVie...

  • Flutter基本知识整理笔记

    与iOS开发的异同。例:Widget和UIView,交互等 生命周期,Widget 常用Widget介绍 路由跳转...

  • widget开发

    widget, 快速便捷、功能单一、使用频繁,如图,是支付宝的widget效果图。 widget开发步骤:就发wi...

  • 使用InheritedWidget实现管理父Widget传值到子

    使用InheritedWidget实现管理父Widget传值到子Widget 在开发过程中,父Widget拿到网络...

  • JQuery UI - Progressbar Widget

    默认使用效果 在 HTML 代码中我们只是简单的定义了一个div,和之前介绍的方法一样,我们也是简单的调用一个 p...

  • JQuery UI - Accordion Widget

    首先,我们来看一下用 Accordion 做出来的效果 简单使用 可以看到,这么一个效果还是很美观的,那么我们应该...

  • JQuery UI - Dialog Widget

    基础效果 可见,这样一个弹出框效果,看起来效果也十分的美观,书写起来也很简单,只需要调用一个方法即可。首先,我们来...

  • jQuery/Bootstrap widget that mak

网友评论

      本文标题:jQuery的widget开发

      本文链接:https://www.haomeiwen.com/subject/rbnxnhtx.html