8.6 插件设计建议

现在,我们已经通过创建插件演示了如何扩展jQuery和jQuery UI,下面我们就列出前面介绍过的和一些未介绍过的插件设计建议。

  • 为避免$别名与其他库发生冲突,可以使用jQuery,或者在立即调用的函数表达式(IIFE)中传入$,使其成为一个局部变量。

  • 无论是以$.myPlugin的方式扩展jQuery,还是以$.fn.myPlugin的方式扩展jQuery的原型,给$命名空间添加的属性都不要超过一个。更多的公有方法和属性应该添加到插件的命名空间中(例如,$.myPlugin.publicMethod$.fn.myPlugin.plugin Property)。

  • 别忘了为插件提供一个默认选项的对象: $.fn.myPlugin.defaults = {size: 'large'}

  • 要允许插件用户有选择地覆盖任何默认选项,包括影响后续方法的调用($.fn.myPlugin.defaults.size = 'medium';)和单独调用($('div').myPlugin ({size: 'small'});)。

  • 多数情况下,扩展jQuery原型时($.fn.myPlugin)要返回this,以便插件用户通过连缀语法调用其他jQuery方法(如$('div').myPlugin().find('p').addClass('foo'))。

  • 在扩展jQuery原型时($.fn.myPlugin),通过调用this.each()强制执行隐式迭代

  • 合适的时候,利用回调函数支持灵活地修改插件行为,从而不必修改插件代码。

  • 如果插件是为了实现用户界面元素,或者需要跟踪元素的状态,使用jQuery UI部件工厂来创建。

  • 利用QUnit等测试框架为自己的插件维护一组自动的单元测试,以确保插件能够按预期工作。有关QUnit的更多信息,请参考附录B。

  • 使用 Git 或其他版本控制系统跟踪代码的版本。可以考虑把插件公开托管到 Github(http://github.com)上,以便其他人帮你改进。

  • 在把自己的插件提供给别人使用时,务必明确许可条款。建议考虑使用MIT许可,这也是jQuery使用的许可。

分发插件

遵从上述建议,就可以编写出清晰、可维护、经得起时间检验的插件来。如果你的插件能完成有用、可重复的任务,那你可能会想把它放在jQuery社区中分享。

除了按照上面所述准备好插件的代码,还应该在分发插件之前,给它配上完整的文档。可以选择一种恰当的文档格式,也可以利用现有的文档标准,例如JSDoc(http://www.usejsdoc.org/)。另外,还有doco(http://jashkenas.github.io/docco/)和dox(https://github.com/visionmedia/dox)等可以自动生成文档的工具。不过,这些工具有赖于Node.js等的安装配置,要求相对高一些。无论最终采用什么格式,都要保证把与插件的方法相关的每一个参数、每一个选项都说清楚。

可以把插件代码和文档托管到任何地方,不过建议大家放在GitHub(http://github.com)上,这个在线代码库非常受欢迎。为了把我们编写的插件公之于众,可以在官方jQuery插件注册表http://plugins.jquery.com/)中提交相关信息。

关于如何提供插件信息和在注册表中发布插件的说明,请参考 http://plugins.jquery.com/docs/publish/。这个过程一开始可能有点麻烦,因为涉及添加GitHub代码库的帖子接收挂钩、创建JSON格式的配置文件、向远程代码库推送打了标签的插件。无论如何,说明还是挺详细的,而且描述得很清楚。如果需要更多帮助,可以订阅 Freenode ( http://freenode.net )的 #jquery-content IRC频道,或者给plugins@jquery.com发邮件询问。