【发布时间】:2011-04-28 07:50:45
【问题描述】:
一些jQuery插件扩展小部件使用_create方法,而另一些使用_init方法,有人能解释一下两者的区别吗?
还有关于何时扩展小部件或直接扩展 jquery.fn 更好的任何指导?
【问题讨论】:
标签: jquery jquery-ui widget construction
一些jQuery插件扩展小部件使用_create方法,而另一些使用_init方法,有人能解释一下两者的区别吗?
还有关于何时扩展小部件或直接扩展 jquery.fn 更好的任何指导?
【问题讨论】:
标签: jquery jquery-ui widget construction
扩展小部件(与 $.fn 相对)的缺点是您创建了对定义小部件“类”的 jquery-ui 的依赖项。对于不使用 jquery-ui 的插件用户来说,这种依赖可能会很昂贵。
就 _create 与 _init 而言,我很确定 _init 先出现,然后在最近的修订版中他们引入并支持 _create。我可能对此有误,但我相信 _init 仍然受支持。如果是,那么两者之间应该没有任何区别。
【讨论】:
创建元素后,所有其他对第一个参数不是字符串的小部件名称的调用都将调用 _init() 方法;如果传递了选项,将在 _init() 方法之前调用 .option() 方法
【讨论】:
一个小部件具有三个阶段:
+-------+----------------+---------------+--------------------------------------------------------------------------------------------+
| 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。
【讨论】: