data-dojo-id
ウィジェットをグローバル名前空間、つまりwindow
オブジェクトに割り当てます。
<button data-dojo-id="save" data-dojo-type="dijit/form/Button">Save</button>
ボタンに直接アクセスできます。
save.set("label", "Add New");
jsFiddle でアクションの違いを参照してください: http://jsfiddle.net/phusick/7yV56/
編集:あなたの質問に答えるために。全く使いませんdata-dojo-id
。これは、AMD とは正反対のグローバル名前空間を汚染します。widgets.save
とにかく、次のようなものを使用widgets.rename
して、汚染を最小限に抑えることができます。
<button data-dojo-id="widgets.save" data-dojo-type="dijit/form/Button">Save</button>
<button data-dojo-id="widgets.rename" data-dojo-type="dijit/form/Button">Rename</button>
IMOは、本格的なアプリケーションではなく、プログレッシブエンハンスメントdata-dojo-id
のために存在します。
data-dojo-id
インスタンスを変数に割り当てるだけなので、同じ dijit を持つ複数の dijit を使用するとdata-dojo-id
、変数は最後に割り当てられたものを指します (つまり、配列にはなりません)。
registry.byId
必要に応じてウィジェットを取得するためにメソッドを大量に使用することを避けることができます。開始する最良の方法はdijit/registy.findWidgets(rootNode, skipNode)
. dojo/parser.parse(rootNode, options)
また、インスタンス化されたオブジェクトの配列、またはより正確には以下を返すことに注意してください。
インスタンス化されたオブジェクトの配列である混合オブジェクトを返しますが、インスタンス化されたオブジェクトで解決される promise を含めることもできます。これは下位互換性のために行われます。パーサーがモジュールを自動要求する場合、それは常に promise の方法で動作し、
parser.parse().then(function(instances){...})
使用する必要があります。
widgets
オブジェクトであるプロパティにContentPane の dijit を割り当てるために使用するメソッドの例:
_attachTemplateWidgets: function(widgets) {
widgets = widgets || this.getChildren();
for(var each = 0; each < widgets.length; each++) {
var widget = widgets[each];
var attachPoint = widget.params.dojoAttachPoint;
if(attachPoint) {
this.widget[attachPoint] = widget;
}
var children = widget.getChildren();
if(children.length > 0) {
this._attachTemplateWidgets(children);
}
}
}
クラス全体をここに置きます: https://gist.github.com/3754324。app.ui._Pane
の代わりにこれを使用しますdijit/layout/ContentPane
。