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.
精彩评论