【问题标题】:jquery widget, _create or _initjquery 小部件,_create 或 _init
【发布时间】:2011-04-28 07:50:45
【问题描述】:

一些jQuery插件扩展小部件使用_create方法,而另一些使用_init方法,有人能解释一下两者的区别吗?

还有关于何时扩展小部件或直接扩展 jquery.fn 更好的任何指导?

【问题讨论】:

    标签: jquery jquery-ui widget construction


    【解决方案1】:

    扩展小部件(与 $.fn 相对)的缺点是您创建了对定义小部件“类”的 jquery-ui 的依赖项。对于不使用 jquery-ui 的插件用户来说,这种依赖可能会很昂贵。

    就 _create 与 _init 而言,我很确定 _init 先出现,然后在最近的修订版中他们引入并支持 _create。我可能对此有误,但我相信 _init 仍然受支持。如果是,那么两者之间应该没有任何区别。

    【讨论】:

    • 小部件的好点。如果我不想为 jqueryui 引入额外的依赖项,你有任何小部件的替换吗?
    • 您可以直接删除小部件代码并将其包含在您的 .js 文件中。有人谈论将小部件移动到 jquery 本身而不是 jqueryui 中,但我不知道这是否已计划用于特定版本。
    • _init 和 _create 之间存在差异。 _create 只被调用一次。 _init 将被多次调用,正如@fudgey 提到的那样
    【解决方案2】:

    来自jQuery UI Developer Guide

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

    【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 2011-10-11
      • 2011-09-10
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多