编写 jQuery 插件就像向 jQuery.prototype
(更常见的是 $.fn
)添加一个方法一样简单,并遵循一些简单的约定,例如返回 this
以实现可链性。那么小部件工厂为何存在?为何有数百行代码?
在本文档中,我们将介绍小部件工厂的优势,并了解在何时何地使用它是有意义的。
link 无状态插件与有状态插件
大多数 jQuery 插件都是无状态的;它们执行一些操作,然后完成任务。例如,如果您使用 .text( "hello" )
设置元素的文本,则没有设置阶段,结果始终相同。对于这些类型的插件,扩展 jQuery 的原型是有意义的。
但是,有些插件是有状态的;它们具有完整的生命周期,维护状态并对更改做出反应。这些插件需要大量专门用于初始化和状态管理(有时还有销毁)的代码。这会导致构建有状态插件时出现大量样板代码。更糟糕的是,每个插件作者都可能以不同的方式管理生命周期和状态,从而导致不同插件的 API 样式不同。小部件工厂旨在解决这两个问题,删除样板代码并在插件之间创建一致的 API。
link 一致的 API
小部件工厂定义了如何创建和销毁小部件、获取和设置选项、调用方法以及侦听小部件触发的事件。通过使用小部件工厂来构建有状态插件,你将自动遵循已定义的标准,这使得新用户可以更轻松地开始使用你的插件。除了定义界面之外,小部件工厂还为你实现了此功能的大部分内容。如果你不熟悉小部件工厂提供的 API,你应该阅读jQuery UI 工作原理。
link 初始化时设置选项
每当你构建一个接受选项的插件时,你都应该为尽可能多的选项定义默认值,然后在初始化时将用户提供的选项与默认值合并。向用户公开默认值也是一个好主意,以便他们甚至可以更改默认值。jQuery 插件中的常见模式如下所示
1
2
3
4
5
6
7
8
9
10
|
|
小部件工厂提供了此功能,甚至更进一步。让我们看看小部件工厂中的情况。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|