data-dojo-id
asigna control dentro de espacio de nombres global, es decir, en window
objeto:
<button data-dojo-id="save" data-dojo-type="dijit/form/Button">Save</button>
para que pueda acceder el botón directamente:
save.set("label", "Add New");
ver la diferencia en la acción en jsFiddle: http://jsfiddle.net/phusick/7yV56/
EDITAR: Para responder a sus preguntas. Yo no uso data-dojo-id
en absoluto. Contamina el espacio de nombres global que es el opuesto directo de lo que hace el AMD. De todos modos, todavía se puede usar algo como widgets.save
y widgets.rename
para reducir al mínimo la contaminación:
<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>
OMI, data-dojo-id
hay para progressive enhancement, no para aplicaciones de pleno derecho.
data-dojo-id
simplemente asigna una instancia a una variable, por lo que con múltiples dijits con la misma data-dojo-id
la variable apuntará a la última asignada (es decir, no será una matriz).
Puede evitar el uso extenso de registry.byId
escribiendo su método para obtener widgets de acuerdo a sus necesidades. La mejor manera de comenzar es dijit/registy.findWidgets(rootNode, skipNode)
. Tenga en cuenta también, que dojo/parser.parse(rootNode, options)
devuelve una matriz de objetos instanciados, o más precisamente:
Devuelve un objeto fusionado que es una matriz de los objetos instanciados, pero también puede incluir una promesa que se resuelve con la instancia objetos. Esto se hace por compatibilidad con versiones anteriores. Si el analizador requiere automáticamente módulos, siempre se comportará de manera promisoria y se deberá usar parser.parse().then(function(instances){...})
.
Un ejemplo de un método que utilizo para asignar dijits de contentPane en su widgets
propiedad, que es un objeto:
_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);
}
}
}
puse toda la clase aquí: https://gist.github.com/3754324. Yo uso este app.ui._Pane
en lugar de dijit/layout/ContentPane
.
Gracias Phusick! Usar solo el atributo id requiere el uso del método byId para obtener el enlace DOM.Ahora me pregunto cuál es mejor para usar en un módulo de Dojo donde está creando instancias múltiples. ¿Data-dojo-id se encarga de gestionarlo internamente para que una identidad de instancia no se confunda con otra? – teaman