2010-05-04 21 views
26

Soy nuevo en Dojo Toolkit. Estoy recibiendo el errorDojo y anular el registro de widgets

Tried to register widget with id=myButton but that id is already registered 

cada vez que intento cargar el contenido dojo dos veces (lo que significa que el contenido HTML de carga a través jQuery.Load en un contenedor div). ¿Hay alguna manera de anular el registro de widgets ya registrados en dojo? He visto algunos ejemplos, pero realmente no los hago funcionar.

Mi botón:

<button dojoType="dijit.form.Button" id="myButton">button</button> 

Respuesta

35

Si usted está mirando para anular el registro de widgets específicos, puede utilizar su destroy() o destroyRecursive() métodos. El segundo destruye cualquier widgets dentro del que está destruyendo (es decir, llamar a destroyRecursive en un widget de formulario también destruirá todos los componentes del formulario).

En su caso, parece que la mejor opción sería la de hacer esto antes de jQuery.load -

var widgets = dijit.findWidgets(<containerDiv>); 
dojo.forEach(widgets, function(w) { 
    w.destroyRecursive(true); 
}); 

El código anterior anular el registro de todos los widgets en <containerDiv>, y preservar su asociada DOM nodos. Para destruir los nodos DOM, pase false a destroyRecursive.

Referencia:

http://dojotoolkit.org/api/1.3/dijit/_Widget/destroyRecursive

+1

Otros en busca de una solución: Consulte también la respuesta a continuación para obtener una solución no recursiva. –

+0

Exactamente lo que estaba buscando. ¡Gracias un montón! – mtchuente

4

Esto funcionó para mí:

dijit.byId('myButton').destroy(true); 
1

creo que sería mejor eliminar el ID de su botón y acceder a ella mediante un punto de adición. Básicamente, harías <button dojoType="dijit.form.Button" data-dojo-attach-point="myButton">button</button>

y luego en tu código tendrías acceso como this.myButton...., pero no estoy seguro de qué versión de dojo estás utilizando. Esto solucionará cualquier problema de identificación ya que dojo le asignará un ID único automáticamente.