一些jquery插件扩展小部件使用_create方法,而其他人使用_init方法,有人可以解释两者之间的差异吗?
关于何时扩展小部件或直接扩展jquery.fn的任何指导?
答案 0 :(得分:18)
创建元素后,对第一个参数不是字符串的窗口小部件名称的所有其他调用将调用_init()方法;如果传递选项,则会在_init()方法
之前调用.option()方法
答案 1 :(得分:5)
扩展小部件(而不是$ .fn)的缺点是你在jquery-ui上创建了一个依赖,它定义了小部件“class”。对于不使用jquery-ui的插件用户而言,这种依赖性可能会很昂贵。
就_create vs _init而言,我很确定_init首先出现,然后在最近的修订版本中,他们引入并支持_create。我可能错了,但我相信_init仍然受到支持。如果是,那么两者之间应该没有任何差异。
答案 2 :(得分: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
方法。因此,这可用于重置(重新初始化)窗口小部件或将其传递给不同的选项。
有关每个阶段的更多详情here。