Penso di capire la differenza tra _create
e _init
nelle definizioni dei widget (vedere ad esempio this question), ma non sono ancora sicuro dello scopo per la distinzione. Quali tipi di attività di configurazione vanno in _create()
o in _init()
? Cosa non va se l'autore del widget sceglie quello sbagliato?Come decidere tra _init e _create nel widget dell'interfaccia utente jQuery?
risposta
Da:
- 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/
Usa
_create
per costruire e iniettare markup, gli eventi si legano, ecc Mettere funzionalità predefinita in_init()
. Il widget di dialogo, ad esempio fornisce un parametro che indica se la finestra di dialogo deve essere aperta dopo l'inizializzazione del widget ; un posto perfetto per_init()
!
anche:
La fabbrica widget di attiva automaticamente le
_create()
e_init()
metodi durante l'inizializzazione, in questo ordine. A prima vista sembra che lo sforzo sia duplicato, ma c'è una differenza di vista tra tra i due. Poiché la fabbrica widget di protegge contro più istanze sullo stesso elemento ,_create()
sarà chiamato un massimo di una volta per ciascun widget esempio, mentre_init()
sarà essere chiamato ogni volta che il widget è chiamato senza argomenti ...
Se l'autore utilizza _init()
quando _create()
avrebbe dovuto essere codificato, il risultato sarà che il codice in _init()
verrà eseguita una volta per ogni widget di esemplificazione.
Risposta breve qui: _create() sarà eseguito quando si esegue il plugin jQuery-ui per la prima volta, come $ xx.your-plugin (le opzioni); _init() verrà eseguito prima e dopo la prima volta quando il codice viene eseguito in $ xx.your-plug (le opzioni);
Come ci sono un certo codice in jQuery-ui.custom.js come questo:
var instance = $.data(this, fullName);
if (instance) {
instance.option(options || {})._init();
}
Quindi, se si disegna un grafico con il plugin jQuery-ui, dopo che è tirato fuori, poi si desidera per utilizzare i nuovi dati per aggiornarlo, è necessario eseguire questa operazione in _init() per aggiornare il grafico. Se si visualizza qualcosa e non si aggiornano completamente, _create() soddisferà le proprie esigenze.
Bene, una volta per * chiamata * al widget :-) In ogni caso, quel secondo collegamento ha un valore inestimabile (su questo e altri problemi); non so come l'ho perso Grazie mille! –