开发者

jquery widget, _create or _init

Some jquery plugin extend widget use _create method, while others use _init method, can someone explain the differences between the two?

Also any gui开发者_运维百科dance on when it is better to extend widget or directly extend jquery.fn?


From the jQuery UI Developer Guide:

Once the element is created, all other calls to the widget name where the first parameter is not a string will call the _init() method; if options are passed, the .option() method will be called before the _init() method


The downside to extending widget (as opposed to $.fn) is that you create a dependency on jquery-ui which defines the widget "class". That dependency could be expensive for users of your plugin that don't also use jquery-ui.

As far as _create vs _init goes, I'm pretty sure that _init came first and then in a recent revision they introduced and favor _create. I might be wrong about this, but I believe that _init is still supported. If it is then there shouldn't be any differences between the two.


A widget has three phases:

+-------+----------------+---------------+--------------------------------------------------------------------------------------------+
| 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.                    |  
+-------+----------------+---------------+--------------------------------------------------------------------------------------------+

NOTE: The method names starting with an underscore are meant to be private by convention.


So there is a difference between _create and _init. One is used for creation and the other is used for initialization. Every time you call the widget with no arguments or with options, it will indirectly call _init method. Therefore, this can be used to reset (re-initialize) a widget or pass it different options.

More details about each phase here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜