阅读更多

3顶
0踩

Web前端

翻译新闻 10 个技巧助你写出卓越的jQuery插件

2012-03-05 16:29 by 正式编辑 sherry617 评论(2) 有4888人浏览
目前网络中存在大量能够实现各种功能的jQuery插件,有的插件表面上看很不错,但在实际使用过程中会出现很多问题。而大多数插件只要再加入一点点额外的功能,就能从“优秀”变成“卓越”,并且有更广泛的用处。

本文针对jQuery插件的开发者列出了一些技巧,以帮助开发者写出更好的jQuery插件,并且这些技巧在插件的维护和扩展方面也有一定的作用。

1. 插件应该即开即用

这是我遇到的最大的问题,因此我将它放在第一个来讲。插件就是插件,不需要用户再进行额外的设置和定义,应该有一个最基本的预设。
$("#container").wTooltip();

jQuery的幻灯片放映插件就是个很好的示例,比如滑动的界面、上一个/下一个按钮等。我曾经见过有的插件需要用户设定一个包含ID和class的DIV,然后再通过插件功能来引用它。而实际上对于这种插件,应该直接设定好并提供启用/关闭选项。

2. 总是提供默认设置

一般插件都包括基础默认设置,因此,在开发插件时应提供一套默认值。这肯定会提高开发者使用插件的机率,并扩大插件的知名度。
var defaultSettings = {
    mode            : 'Pencil',
    lineWidthMin    : '0',
    lineWidthMax    : '10',
    lineWidth       : '2'
};
 
settings = $.extend({}, defaultSettings, settings || {});

上面的代码是以标准的方式来设定默认值,其他插件使用者能够通过各种设置来对插件进行扩展。

3. 独特的命名法

在写插件时,尽量令插件的类、ID、命名与众不同。这也不是件难事儿,只要避免与现有的JavaScript和CSS代码重名就可以了。
$("#container").tooltip();    //bad    
$("#container").wTooltip();   //good

在上面的例子中,在插件的普通命名前加上一个“W”,就能和可能存在的通用名称区别开来。包括“tab”或“holder”等通用术语我也使用这种包含独特关键字的命名方法。
_wPaint_button
_wPaint_holder

同时,加入下划线的方法也可以确保ID或class的名称不与其他的重复,这也让我更加确信我写的jQuery插件将独一无二。

4. 插件代码标准化 

大多数好的插件都有这段标准的jQuery代码,它包含了插件开发、维护和更新阶段所有的重要代码。如果想获得更多信息的话,可以查看我的jQuery Tooltip Plugin代码。
var defaultSettings = {
    //settings
};
 
$.fn.wPaint = function(settings)
{
    //check for setters/getters
     
    return this.each(function()
    {
        var elem = $(this);
 
        //run some code here
         
        elem.data("_wPaint", wPaint);
    }
     
    //classes/prototyping
}

需要注意以下五个关键点:

  • 插件外的默认设置不需要每次都实例化。
  • Setter&Getter方法并非必需,但在每个主要循环运行前都要进行检查。
  • 返回每个元素时不要破坏jQuery的方法链流程。
  • 存储所有元素使用的数据,因为之后Setter&Getter方法可能会用到。
  • 最后设置所有外部的Classes/Prototypes。
5. 简洁的代码

简单的文件结构和简洁的代码是非常重要的,因为这不仅便于别人看懂代码,也利于你自己梳理结构。强调这点是因为我遇到过一些奇怪的名称,连开发者自己都无法看懂。

./images/
./includes/
./themes/
./wPaint.js
./wPaint.min.js
./wPaint.css
./wPaint.min.css

上面的这些结构就非常清晰,需要包含哪些文件,在哪里可以找到其他插件文件或是否需要查看jQuery库等等。

6. 使用class原型

这是一个相当广的范围,所以我在这里只简单提一下。使用原型模式主要有两个原因:

  • 一是不必实例化每个方法的单独拷贝,这样的话效率更高,运行速度更快。
  • 二是只引用每个对象方法,不保存其拷贝,可以节省大量内存。
function Canvas(settings)
{
    this.canvas = null;     
    this.ctx = null;
}
 
Canvas.prototype = 
{
    generate: function()
    {
        //generate code
    }
}

它还能帮你组织代码,使其能重复使用。上面的例子中只有Canvas对象对每个新对象进行实例化,原型只是被引用而已。

7. 提供Setters & Getters方法

提供Setters & Getters方法并非必需,但我觉得这是一个不错的选择。下面的代码是关于允许插件被修改,最基本的设置如下:
if(typeof option === 'object'){
    settings = option;
}else if(typeof option === 'string'){
    if(
        this.data('_wPaint_canvas') &&
        defaultSettings[option] !== undefined
    ){
        var canvas = this.data('_wPaint_canvas');
 
        if(settings){
            canvas.settings[option] = settings;
            return true;
        }else{
            return canvas.settings[option];
        }
    }else return false;
}

8. 在所有浏览器上进行测试

在所有浏览器上进行测试对于插件是否能生存至关重要。开发者无法发现代码中的故障,但用户肯定能发现,如果出现了很多问题,毫无疑问,你的插件就被淘汰了。有一次,我在这个jQuery Color Picker Plugin插件中发现了一些小Bug,这些Bug令该插件在IE7中完全不可用,原因是IE7不支持“inline-block”元素,但只需要一个简单的修正就可以解决这个问题。

写好插件后,你会想在第一时间发布它,但一定要Hold住并多花一天来测试。这样做不仅能修复任何可能出现的简单错误,还能给你一些改进的灵感。

9. 打包发布

当你准备好发布插件后,别忘记以下三个步骤:

  • 为较复杂的插件部分写说明文档。
  • 无论是通过文件名还是在文档中某处标明你的插件版本,让用户能够了解自己使用的版本,并能及时检查更新。
  • 最后为你的代码提供MINI版本,只需要几分钟便能增加开发者再次使用你的插件的机率。
要知道有时候细小的步骤却真正能令你的插件与众不同。

10. 上传插件代码

有很多提供上传服务的网站,但我最喜欢Github和Google Code。

也许大多数开发者并不想上传自己的jQuery插件代码,特别是如果它是一个内部项目的话,但如果插件是为公众服务的,那么Github和Google code将显示出其神奇之处:提供插件的问题报告、即时动态和下载数量。

总之,以上这些技巧几乎涵盖了jQuery插件开发的核心,也为开发插件提供了一个比较标准的格式和结构。无论你是业余的还是专业的开发者,使用插件的人数与你所获的成就感是成正比的。

英文原文:10 Tips for Writing Awesome jQuery Plugins
3
0
评论 共 2 条 请登录后发表评论
2 楼 zachary.guo 2012-03-05 17:55
各个插件,如 plginA, pluginB 等
$("...").pluginA()
$("...").pluginB();

我们要认为这就是无参的构造函数,如果你传入了 settings,就是有参的构造参数。调用构造函数的结果是什么?对象的实例!
1 楼 zachary.guo 2012-03-05 17:53
并不赞同 返回每个元素时不要破坏jQuery的方法链流程。

要以 OOP 的思想来编写和使用 jQuery 插件,假设 tooltip 插件,$("...").tooltip() 后,的确可以直接有效果了,但是,我要的是它能够返回给我 ToolTip 对象。我可以在后续的交互中,随意调用该对象的行为。

var tooltip = $("...").tooltip();

...

tooltip.destory();
tooltip.methodA(param2, parem2)

这样使用更简洁,可读性更强。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Lephone Loczlize Plus 1.06 中文免费版 PE 字串替换器.zip

    Lephone Loczlize Plus 1.06 中文注册版是一个本地化工具,主要用于非资源格式的本地化工作,支持的种类包括非资源格式的 C 编译的程序中的 ASCII 字符串和 UniCode 字符串、非资源格式的 Delphi(C++ Builder)编译...

  • LePhone_Updata

    LePhone_Updata 安卓 乐phone 线刷 刷机工具

  • lephone 驱动 上网

    把lephone当做modem上网,一个手机,一台电脑,就可以传统方式上网

  • lephone刷机

    挺好用的 就是有的文件得自己下 不过各大论坛都有

  • 乐丰Lephone 2908 刷机驱动

    乐丰Lephone 2908 刷机驱动 另有乐丰lephone2908 安卓系统 ROOT刷机包

  • lephone(乐丰) A03 手机刷机ROM

    前段时间使用的lephone手机(型号a03)root后出误删除了系统文件导致进不了系统,找了许久都没有找到此机型的刷机ROM,后来联系了官方客服才找到。 客服倒是十分的爽快,直接就给我发过来了,CSDN只支持最大60MB的...

  • Lephone程序壁纸DIY(设置功能界面背景)

    豌豆夹安装目录或者自己下载adb也可以,将原有的Launcher使用如下命令 1.adb root 获取root权限 2.adb remount 重新以root加载 3.adb push x:/ddd/Launcher.apk /system/app 这里x:/ddd是你Launcher存放的路径 ...

  • lephone(乐丰) A03 手机刷机ROM part 2

    前段时间使用的lephone手机(型号a03)root后出误删除了系统文件导致进不了系统,找了许久都没有找到此机型的刷机ROM,后来联系了官方客服才找到。 客服倒是十分的爽快,直接就给我发过来了,CSDN只支持最大60MB的...

  • lephone(乐丰) A03 手机刷机ROM part 3

    前段时间使用的lephone手机(型号a03)root后出误删除了系统文件导致进不了系统,找了许久都没有找到此机型的刷机ROM,后来联系了官方客服才找到。 客服倒是十分的爽快,直接就给我发过来了,CSDN只支持最大60MB的...

  • LePhone开发常见问题处理

    LePhone开发常见问题处理,pdf文档,对LePhone开发者有效

  • Lephone Localize Plus(点睛字符替换器) 1.06

    本软件是一个本地化工具,主要用于非资源格式的本地化工作,支持的种类包括非资源格式的 C 编译的程序中的 ASCII 字符串和 UniCode 字符串、非资源格式的 Delphi(C++ Builder)编译的程序的字符串、VB 编译的程序的...

  • Lephone Localize Plus v1.06 注册

    本软件是一个本地化工具,主要用于非资源格式的本地化工作,支持的种类包括非资源格式的 C 编译的程序中的 ASCII 字符串和 UniCode 字符串、非资源 格式的 Delphi(C++ Builder)编译的程序的字符串、VB 编译的...

  • android_lephone

    这是联想基于ANDROID平台自己研究与实现的另一个3G平台,名字叫LEPGONE,为重要的保密资料,限期三年的研究成果与保密协定,资料非常可贵......希望能给参与ANDROID研究的人有所帮助

  • 四叶草插件Lephone-1.2.1.apk

    四叶草插件Lephone-1.2.1.apk

  • lephone四叶草自定义软件

    lephone四叶草自定义软件RT。。很不错的软件。

  • 乐风Lephone W101搜星补丁

    增加lephoneW101 GPS搜星速度 很见效的

  • dbentry mysql_DbEntry.Net(Lephone Framework) Access ORM:安装和简单使用

    项目中用到Access数据库,之前用的普通Ado.Net 三层。遇到表字段叫多时,就比较费力。想要使用ORM,无奈EF不...这有个demo:http://www.cnblogs.com/wangjikun3/archive/2009/06/20/1507175.html这里推荐个ORM框架,...

  • fxcop规则下载(Lephone FxCop Rules 1.1)

    Lephone FxCop Rules 1.1

  • lephone s2 升级到 4.0 教程

    在此谢谢苏颜禾 此教程我已自己做实践过一遍 其中要求的系统务必要是winxp sp3 ...其中的两个文件可从此处下载 http://115.com/file/dpjkmp2g#cygwin1.dll http://115.com/file/benmg2ms#apollodownla...

Global site tag (gtag.js) - Google Analytics