startup() è definito in _Widget ed è semplicemente una "parte del ciclo di vita". È l'ultimo passaggio nel ciclo di vita del widget e non è richiesto da tutti i widget. Il caso più comune in cui è assolutamente necessario è quando si creano programmaticamente widget di layout. È usato come un modo per prevenire i calcoli ridondanti quando i bambini hanno bisogno di dimensionamento. Ad esempio, un BorderContainer.
var bc = new dijit.layout.BorderContainer({
style:"height:200px; width:200px"
});
// can call bc.startup() now, and the BorderContainer will resize
// all children each time a new child is added. Or, we can add all
// our children now, then trigger startup() and do it all at once.
var top = new dijit.layout.ContentPane({
region:"top", style:"height:100px"
}).placeAt(bc);
var mid = new dijit.layout.ContentPane({ region:"center" }).placeAt(bc);
// now BC will do the calculations, rather than in between each
// the above addChild/placeAt calls.
bc.startup();
avvio viene chiamato automaticamente dal parser in caso di parseOnLoad: vero o manuale esecuzione. Il parser ritarda la chiamata startup() fino a quando tutti i widget figli trovati non sono stati istanziati in modo appropriato.
dijit.Dialog è un caso strano. startup() DEVE essere chiamato anche su questo widget.
var dialog = new dijit.Dialog({ title:"Hmm", href:"foo.html" });
dialog.startup();
dialog.show();
La maggior parte dei widget NON richiedono startup chiamata, ma nei casi in cui qualcosa che eredita da _Widget non sostituisce il membro di avvio, la chiamata è essenzialmente un ambiente no-op this._started = true; Se crei la tua funzione startup(), dovresti chiamare this.inherited (argomenti) o semplicemente impostare il trigger _started manualmente.
In Dojo 1.4, il ciclo di vita qui è stato leggermente regolato.In precedenza, un widget con widgetInTemplate: true chiamava startup() sui widget figlio PRIMA dell'avvio() sul genitore. In 1.4 l'avvio dei bambini() sarà chiamato DOPO l'avvio genitore(). Questo comportamento è ricorsivo per molti livelli di widget nidificati con widgetInTemplate: true vengono istanziati.
È sempre "sicuro" chiamare .startup(), sebbene tu "sappia" (perché è un semplice widget endpoint o il tuo codice _Widget personalizzato) puoi omettere la chiamata.
Solo per informazioni il comportamento reg dijit.Dialog è leggermente cambiato ora chiamando lo show chiama automaticamente l'avvio dall'interno della funzione – Gaurav