Ich glaube, ich verstehe den Unterschied zwischen _create
und _init
in Widget-Definitionen (siehe zum Beispiel this question), aber ich bin immer noch nicht sicher über die Zweck für die Unterscheidung. Welche Arten von Setup-Aufgaben gehen in _create()
oder in _init()
? Was passiert falsch, wenn der Widget-Autor den falschen auswählt?Wie kann man sich zwischen _init und _create im jQuery UI Widget entscheiden?
Antwort
Von:
- http://forum.jquery.com/topic/jquery-ui-1-8-use-of-init
- http://www.erichynds.com/jquery/tips-for-developing-jquery-ui-widgets/
- http://jqueryui.com/demos/dialog/
Verwenden
_create
zu bauen und Markup, binden Ereignisse zu injizieren usw. Legen Standardfunktionalität in_init()
. Das Dialogfeld-Widget, z. B. , enthält einen Parameter , der angibt, ob der Dialog geöffnet werden soll, wenn das Widget initialisiert ist; ein perfekter Platz für_init()
!
auch:
Die Widget Fabrik automatisch feuert die
_create()
und_init()
Methoden während der Initialisierung, in dieser Reihenfolge. Auf den ersten Blick scheint es, dass die Mühe dupliziert ist, aber es gibt einen Sichtunterschied zwischen den beiden. Da die Widget Fabrik gegen mehrere Instanziierungen auf das gleiche Elemente schützt, wird_create()
sein genannt maximal einmal für jede Widget-Instanz, während_init()
wird jedes Mal aufgerufen werden, das Widget ohne Argumente aufgerufen ist ...
Wenn der Autor verwendet _init()
wenn _create()
codiert wurden, sollte das Ergebnis sein wird, dass der Code in _init()
wird einmal pro Widget Instanzierung ausgeführt werden.
Kurze Antwort hier: _create() wird ausgeführt, wenn Sie Ihre jquery-ui-Plugin zum ersten Mal ausführen, wie $ xx.your-Plugin (Optionen); _init() wird ausgeführt zuerst und nach dem ersten Mal, wenn Ihr Code in $ xx.Ihr-Plugin (Ihre Optionen) läuft;
Da es einige Code in jquery-ui.custom.js wie diese sind:
var instance = $.data(this, fullName);
if (instance) {
instance.option(options || {})._init();
}
Also, wenn Sie ein Diagramm mit jquery-ui-Plugin ziehen , nachdem sie herausgezogen ist, dann Sie wollen zu verwenden Sie neue Daten, um es zu aktualisieren, Sie müssen dies in _init() tun, um Ihr Diagramm zu aktualisieren. Wenn Sie nur etwas anzeigen und nicht vollständig aktualisieren, erfüllt _create() Ihre Anforderungen.
Nun, einmal pro * Aufruf * an das Widget :-) In jedem Fall ist dieser zweite Link von unschätzbarem Wert (zu diesem und anderen Fragen); Weiß nicht, wie ich es verpasst habe. Vielen Dank! –