I think I understand the difference between _create
and _init
in widget definitions (see for instance this question), but I'm still not certain about the purpose for the distinction. What sorts of setup tasks go in _create()
or in _init()
? What goes wrong if the widget author chooses the wrong one?
To change the defaults, you can use the event, collapsible, heightStyle, and animated options. The basic formatting of the accordion is done by the CSS for jQuery UI, but you can use CSS to format the contents within the panels.
a jQuery UI widget is a specialized jQuery plug-in. Using plug-in, we can apply behaviours to the elements. However, plug-ins lack some built-in capabilities, such as a way to associate data with its elements, expose methods, merge options with defaults, and control the plug-in's lifetime.
The widget factory defines how to create and destroy widgets, get and set options, invoke methods, and listen to events triggered by the widget. By using the widget factory to build your stateful plugins, you are automatically conforming to a defined standard, making it easier for new users to start using your plugins.
From:
Use
_create
to build and inject markup, bind events, etc. Place default functionality in_init()
. The dialog widget, for example, provides anautoOpen
parameter denoting whether or not the dialog should be open once the widget is initialized; a perfect spot for_init()
!
Also:
The widget factory automatically fires the
_create()
and_init()
methods during initialization, in that order. At first glance it appears that the effort is duplicated, but there is a sight difference between the two. Because the widget factory protects against multiple instantiations on the same element,_create()
will be called a maximum of one time for each widget instance, whereas_init()
will be called each time the widget is called without arguments...
If the author uses _init()
when _create()
should have been coded, the result will be that the code in _init()
will be executed once per widget instantiation.
Short answer here: _create() will be executed when you run your jquery-ui plugin for the first time, like $xx.your-plugin(your options); _init() will be executed first and after the first time when your code runs into $xx.your-plugin(your options);
As there are some code in jquery-ui.custom.js like this:
var instance = $.data( this, fullName ); if ( instance ) { instance.option( options || {} )._init(); }
So, if you draw a chart with jquery-ui plugin, after it's drawn out, then you want to use new data to update it, you need to do this in _init() to update your chart. If you just display something and won't update them totally, _create() will meet your needs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With