data-dojo-id
ordnet Widget in globalen Namensraum, dh in window
Objekt:
<button data-dojo-id="save" data-dojo-type="dijit/form/Button">Save</button>
, so dass Sie die Taste direkt zugreifen können:
save.set("label", "Add New");
Sehen Sie den Unterschied in Aktion bei jsFiddle: http://jsfiddle.net/phusick/7yV56/
EDIT: Um Ihre Fragen zu beantworten. Ich verwende data-dojo-id
überhaupt nicht. Es verschmutzt den globalen Namensraum, was das direkte Gegenteil von dem ist, was die AMD tut. Wie auch immer, man kann immer noch so etwas wie widgets.save
und widgets.rename
verwenden, um die Verschmutzung zu minimieren:
<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
ist es für progressive enhancement, nicht für vollwertige Anwendungen.
data-dojo-id
weist nur eine Instanz einer Variablen zu, so dass bei mehreren Dijits mit derselben data-dojo-id
die Variable auf die zuletzt zugewiesene zeigt (d. H. Es wird kein Array sein).
Sie können die ausführliche Verwendung von registry.byId
vermeiden, indem Sie Ihre Methode schreiben, um Widgets entsprechend Ihren Anforderungen zu erhalten. Der beste Weg zum Starten ist dijit/registy.findWidgets(rootNode, skipNode)
. Bitte beachten Sie auch, dass dojo/parser.parse(rootNode, options)
eine Reihe von instanziiert Objekte zurückgibt, oder genauer gesagt:
Liefert ein gemischtes Objekt, das ein Array der instanziiert Objekte ist, sondern auch ein Versprechen enthalten, die mit dem instanziiert behoben Objekte. Dies geschieht aus Gründen der Abwärtskompatibilität. Wenn der Parser Module automatisch anfordert, verhält er sich immer versprechend und parser.parse().then(function(instances){...})
sollte verwendet werden.
Ein Beispiel für eine Methode, die ich ContentPane den Dijits in seine widgets
Eigenschaft zuweisen verwenden, die ein Objekt ist:
_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);
}
}
}
ich die ganze Klasse hier setzen: https://gist.github.com/3754324. Ich benutze diese app.ui._Pane
anstelle von dijit/layout/ContentPane
.
Danke Phusick! Wenn Sie nur das Attribut id verwenden, müssen Sie die Methode byId verwenden, um den DOM-Hook zu erhalten.Jetzt frage ich mich, welche besser für die Verwendung in einem Dojo-Modul ist, in dem Sie mehrere Instanzen erstellen. Arbeitet data-dojo-id intern damit, dass eine Instanzidentität nicht mit einer anderen verwechselt wird? – teaman