JQuery小部件,_create或_init

9

有些jQuery插件使用_create方法来扩展widget,而其他插件则使用_init方法,有人能解释一下两者之间的区别吗?

此外,有没有关于何时更好地扩展widget或直接扩展jquery.fn的指导?

3个回答

18
jQuery UI开发者指南中得知:

一旦元素被创建,所有其他调用小部件名称的情况下第一个参数不是字符串将调用_init()方法;如果传递选项,则将在_init()方法之前调用.option()方法。


不幸的是,链接现在已经失效。 - Joe Atzberger
1
尝试使用此链接访问API:https://api.jqueryui.com/jquery.widget/#method-_init 或者阅读这篇博客文章:http://www.erichynds.com/blog/tips-for-developing-jquery-ui-widgets - Mottie

4
继承widget(而不是$.fn)的缺点在于它会创建一个依赖于jquery-ui的widget“class”。对于不使用jquery-ui的插件用户来说,这种依赖可能很昂贵。
就_create和_init而言,我相信_init比_create先出现,最近的修订中引入了_create并支持它。但我可能错了,我认为_init仍然被支持。如果是这样,那么两者之间不应该有任何区别。

1
关于widget的观点很好。如果我不想引入额外的依赖项到jqueryui,你有什么widget的替代品吗? - Gelin Luo
3
你可以直接提取小部件代码并将其包含在你的.js文件中。之前有讨论将小部件移入jquery本身,而不是jqueryui,但我不知道是否已经计划将其纳入特定版本发布。 - Ken Browning
5
_init和_create是不同的。_create只会被调用一次,而_init会根据@fudgey的提及被多次调用。 - jsgoupil

3
一个小部件有三个阶段:
+-------+----------------+---------------+--------------------------------------------------------------------------------------------+
| Phase | Name           | jQuery Method | Description                                         |  
+-------+----------------+---------------+--------------------------------------------------------------------------------------------+
|     1 | Creation       | _create       | First time the widget is applied to an element, it is called.                              |  
|     2 | Initialization | _int          | The _init method is called after _create when the widget is first applied to its elements. |  
|     3 | Destruction    | destroy       | The widget's destroy method is used to detach a widget from an element.                    |  
+-------+----------------+---------------+--------------------------------------------------------------------------------------------+

注意:以下划线开头的方法通常被认为是私有的。


_create_init之间存在区别。一个用于创建,另一个用于初始化。每次使用没有参数或选项调用部件时,它都会间接地调用_init方法。因此,可以使用它来重置(重新初始化)小部件或传递不同的选项。

有关每个阶段的更多详细信息在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接