teacher students pez juegos judo games dojo

students - dojo karate do



Diferencia entre id y data-dojo-id (1)

¿Cuál es la diferencia entre una identificación y una identificación de dojo en una etiqueta de dojo como esta:

<button id="save" data-dojo-type="dijit/form/Button" type="button" data-dojo-attach-event="onClick:save">Save</button>

Intento hacer referencia a este botón para cambiar su etiqueta con: var myButton = dijit.byId ("guardar"); para poder cambiar la etiqueta del botón myButton.set ("label", "Add New");

Si utilizo id = "guardar", funciona. Si solo uso data-dojo-id = "save", no funciona.

Soy bastante nuevo en Dojo, así que una explicación o un tutorial al que me puedas dirigir sería muy apreciado.


data-dojo-id asigna el widget al espacio de nombre global, es decir, al objeto window :

<button data-dojo-id="save" data-dojo-type="dijit/form/Button">Save</button>​

para que pueda acceder al botón directamente:

save.set("label", "Add New");

Vea la diferencia en acción en jsFiddle: http://jsfiddle.net/phusick/7yV56/

EDITAR: para responder a sus preguntas. 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 puedes usar algo como widgets.save y widgets.rename para minimizar 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>​

IMO, data-dojo-id está ahí para la mejora progresiva , no para aplicaciones completamente desarrolladas.

data-dojo-id simplemente asigna una instancia a una variable, por lo que con múltiples dijits con el mismo 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 combinado que es una matriz de objetos instanciados, pero también puede incluir una promesa que se resuelve con los objetos instanciados. Esto se hace por compatibilidad con versiones anteriores. Si el analizador requiere automáticamente módulos, siempre se comportará de forma promisoria y se parser.parse().then(function(instances){...}) .

Un ejemplo de un método que uso para asignar los dijits de ContentPane en su propiedad de widgets , 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 . Uso esta app.ui._Pane lugar de dijit/layout/ContentPane .