startup()は_Widgetで定義されており、単に「ライフサイクルの一部」です。これはウィジェットのライフサイクルの最後のステップであり、すべてのウィジェットで必須というわけではありません。絶対に必要な最も一般的なケースは、プログラムでレイアウトウィジェットを作成する場合です。これは、子がサイズ設定を必要とするときに冗長な計算を防ぐ方法として使用されます。たとえば、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();
parseOnLoad:trueまたは手動実行の場合、起動はパーサーによって自動的に呼び出されます。パーサーは、見つかったすべての子ウィジェットが適切にインスタンス化されるまで、startup()の呼び出しを遅らせます。
dijit.Dialogは奇妙なケースです。このウィジェットでもstartup()を呼び出す必要があります。
var dialog = new dijit.Dialog({ title:"Hmm", href:"foo.html" });
dialog.startup();
dialog.show();
ほとんどのウィジェットはスタートアップを呼び出す必要はありませんが、_Widgetから継承するものがスタートアップメンバーをオーバーライドしない場合、呼び出しは基本的にno-op設定this._started = true; 独自のstartup()関数を作成する場合は、this.inherited(arguments)を呼び出すか、単に_startedトリガーを手動で設定する必要があります。
Dojo 1.4では、ここでのライフサイクルがわずかに調整されています。以前は、widgetsInTemplate:trueを持つウィジェットは、親のstartup()の前に子ウィジェットのstartup()を呼び出していました。1.4では、子のstartup()は親のstartup()の後に呼び出されます。この動作は再帰的ですが、widgetsInTemplate:trueを持つネストされたウィジェットの多くのレベルがインスタンス化されます。
.startup()を呼び出すことは常に「安全」ですが、「知っている」場合(単純なエンドポイントウィジェットまたは独自のカスタム_Widgetコードであるため)、呼び出しを省略できます。