接着如何自己编写一个easyui插件继续分享一下如何从上一节写的“hello”插件继承出一个“hello2”。

参考了combobox的源码中继承combo,当然我这个简单很多了。都是根据自己的理解来写的,没有参考什么权威资料,欢迎各位看官拍砖。

1. 实现效果

点击这里在线查看
增加了一个输入框,sayHello的是输入的名字。效果:

2. 贴代码

(function ($) {
function init(target) {
$(target).addClass('hello2'); return $(target);
} //easyui插件函数
$.fn.hello2 = function (options, param) {
//如果options为string,则是方法调用,如$('#divMyPlugin').hello('sayHello');
if (typeof options == 'string') {
var method = $.fn.hello2.methods[options];
if (method) { //尝试调用hello2的方法,没有找到就去找hello的方法
return method(this, param);
} else {
return this.hello(options, param); //调用继承的hello的方法
}
} //否则是插件初始化函数,如$('#divMyPlugin').hello();
options = options || {};
return this.each(function () {
var state = $.data(this, 'hello');
if (state) {
$.extend(state.options, options);
} else {
//easyui的parser会依次计算options、initedObj
state = $.data(this, 'hello2', {
options: $.extend({}, $.fn.hello2.defaults, $.fn.hello2.parseOptions(this), options),
}); init(this);
} $(this).hello(state.options); //调用继承的hello的构造方法 var $input = $("<input />");
var current = this;
$input.width(state.options.inputWidth).val(state.options.to).change(function () {
var val = $(this).val();
$.data(current, 'hello').options.to = val;
$.data(current, 'hello2').options.to = val;
});
$(this).append($input); $(this).css('color', state.options.myColor);
});
}; //【注意】这里的methods没有采用$.extend
$.fn.hello2.methods = {
options: function (jq) {
var copts = jq.hello('options'); //获取hello继承的options
return $.extend($.data(jq[0], 'hello2').options, {});
}
}; //设置参数转换方法(使用$.extend从继承的hello那里拓展)
$.fn.hello2.parseOptions = function (target) {
var opts = $.extend({}, $.fn.hello.parseOptions(target), $.parser.parseOptions(target, [{ inputWidth: 'number' }]));//这里可以指定参数的类型
return opts;
}; //设置hello插件的一些默认值(使用$.extend从继承的hello那里拓展)
$.fn.hello2.defaults = $.extend({}, $.fn.hello.defaults, {
inputWidth: 100
}); //注册插件hello2
$.parser.plugins.push("hello2");
})(jQuery);

  

如何自己编写一个easyui插件续的更多相关文章

  1. 如何自己编写一个easyui插件

    本文介绍如何通过参考1.4.2版本的progressbar的源码自己编写一个HelloWorld级别的easyui插件,以及如何拓展插件的功能. 有利于我们理解easyui插件的实现,以及了解如何对e ...

  2. 如何编写一个gulp插件

    很久以前,我们在"细说gulp"随笔中,以压缩JavaScript为例,详细地讲解了如何利用gulp来完成前端自动化. 再来短暂回顾下,当时除了借助gulp之外,我们还利用了第三方 ...

  3. 从零开始编写一个vue插件

    title: 从零开始编写一个vue插件 toc: true date: 2018-12-17 10:54:29 categories: Web tags: vue mathjax 写毕设的时候需要一 ...

  4. 自己动手编写一个VS插件(五)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 继续编写VisualStudio插件.这次我编写的插件叫DevAssist(意思是开发助手).在看了前面的文章之后你知 ...

  5. 自己动手编写一个Mybatis插件:Mybatis脱敏插件

    1. 前言 在日常开发中,身份证号.手机号.卡号.客户号等个人信息都需要进行数据脱敏.否则容易造成个人隐私泄露,客户资料泄露,给不法分子可乘之机.但是数据脱敏不是把敏感信息隐藏起来,而是看起来像真的一 ...

  6. 自己动手编写一个VS插件(八)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 利用业余时间继续开发一个VS插件.我要开发的插件是一个代码库插件,主要是用于积累我平时要使用的代码.在之前我已经实现了 ...

  7. 自己动手编写一个VS插件(七)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 继续开发VS插件.今天在添加ATL控件时出现一个"未能返回新代码元素"的错误,如下图: 解决办法是 ...

  8. 自己动手编写一个VS插件(六)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在上篇中我们已经实现了创建和显示一个工具栏出来,它的效果图是这样的: 现在我们实现一些简单功能,具体就是单击按钮弹出一 ...

  9. webpack编写一个plugin插件

    插件向第三方开发者提供了 webpack 引擎中完整的能力.使用阶段式的构建回调,开发者可以引入它们自己的行为到 webpack 构建流程中.创建插件比创建 loader 更加高级,因为你将需要理解一 ...

随机推荐

  1. Bink Player

    class CBIKMaterial { public: CBIKMaterial(); ~CBIKMaterial(); bool Init(const char *pFileName); void ...

  2. c++ 指针(一)

    指针:是说指针名表示的是地址.是一个变量,存储的是值的地址,而不是值本身 *运算符被称为间接值或解除引用运算符也可以叫做取地址符 声明一个指针 int * p_data; * p_data的类型为in ...

  3. centos设置静态IP

    1.编辑网卡文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 # eth0为网卡编号 设置网卡eth0的IPV4信息,需要注意的是,设置的IPADDR需要 ...

  4. 一道javascript面试题

    下面表达式比较的结果分别是什么? 1. []=="0" 2. []==0 3. "0"==0 4. []==false 5. []==[] 大家可以试试写下自己 ...

  5. web安全——目录

    说明 写这个目录是为了方便阅读.也是为了记录统一的问题. 这个系列,并不一定是全的,也不一定是对的,所以请大家多做过滤. 这里面场景比较多的是本人在实践中遇到的问题,然后自己思考抽象的. 目录 web ...

  6. 链队列的C/C++实现

    #include <iostream> using namespace std; const int N = 10; typedef int ELEMTYPE; typedef struc ...

  7. JavaMelody监控SQL

    前言 前面讲过了Javamelody的基本配置,这里简单的介绍下,如何使用Javamelody来监控JDBC以及SQL. 手码不易,转载请注明:xingoo 在网上搜索很多资料,仅有开源社区上的两篇帖 ...

  8. 对象关系映射ORM

    对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效 ...

  9. [转]为什么我要用 Node.js? 案例逐一介绍

    原文地址:http://blog.jobbole.com/53736/ 介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样, ...

  10. 关于如何调用苹果自带的地图APP

    CLGeocoder *geoCoder = [[CLGeocoder alloc] init]; // 通过地理编码,得到位置, CLLocation *loc = [[CLLocation all ...