2012-04-16 8 views
11

Im usando Dojo para crear un diálogo simple para crear un usuario en un sistema. El problema es que me sale el error:Diálogo Dojo cerrar evento en X (arriba-derecha)

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

user_submit, es un botón Dojo Tengo que terminar el formulario dentro del diálogo. Al cerrar el cuadro de diálogo haciendo clic en él y enviar el formulario no hay ningún problema en abrir el cuadro de diálogo de nuevo (en el evento click en el botón Tengo esta línea de código:

dijit.byId("user_submit").destroy(); 

pero si cierro el diálogo a través el botón [x] -link/en la esquina superior derecha no destruyo el botón y luego no puedo volver a abrir el cuadro de diálogo sin volver a cargar la página.

¿Cómo consigo que Dojo destruya el botón o cómo sobrecargar el evento click en el botón [X] -link /, para que pueda escribir el comando destroy para el botón?

Respuesta

7

Encontré una solución. mediante el uso de dojo.connect().

myDialog.connect(myDialog, "hide", function(e){ 
    dijit.byId("user_submit").destroy(); 
}); 

habría postet esto poco después de que he publicado la quistion, pero yo no tenía suficientes puntos, así que aquí está la respuesta de nuevo, sólo un poco :-) finales

+0

¡Gracias! Funcionó a la perfección! Para aquellos que tienen cosas en el diálogo, no te olvides de agregar un 'dijit.byId (" user_submit "). DestroyDescendants();' !!!! – Superdrac

+1

El método de destrucción recomendado es 'destroyRecursive' – JamieJag

3

IIRC, el evento de extensión onClose se llama cuando hace clic en la cosa X, por lo que podría tratar de poner su código de limpieza allí.


También podría considerar eludir el problema por completo. Tal vez no es necesario destruir el widget y, en su lugar, podría reutilizar el mismo. También podría hacer una prueba de existencia de artilugios antes de volver a crearla, destruyendo la versión anterior si aún está activa.

+0

I conectada al evento "ocultar" y que trabajó (poco después, pero no tienen suficientes puntos para publicar una respuesta tan rápida a mi propia pregunta). Pero, de hecho, al optimizar el guión, haría todo lo que dijera. Pero dado que los nuevos en Dojo y el "proyecto" tenían que hacerse rápidamente, no tuve tiempo para pensar en la gestión de recursos. –

+0

+1 para reutilizar el diálogo dijit – jumpnett

-1

Al pulsar la X en en la parte superior del cuadro de diálogo, se activa el evento "onCancel".

Deseche el elemento allí.

+1

" El desarrollador no debe anular ni conectarse a este método; es un dispositivo de comunicación privado entre TooltipDialog y lo que lo abrió (por ejemplo: dijit/form/DropDownButton) "- Documentación de la API de Dojo https: // dojotoolkit.org/api /> Dijit> _DialogMixin> onCancel – GavinR

15

"Developer shouldn't override or connect to this method" para "onCancel" ver documentation. Una mejor solución es:

var myDialog = new Dialog({ 
    id: "myDialogId1", 
    onHide: function() { 
     myDialog.destroy() 
    } 
}); 
+1

¿tiene un enlace a la documentación que podría compartir con la persona que hace la pregunta? –

+0

http://dojotoolkit.org/api/ Busca dijit/Dialog y mira el método constructor, pasamos params & srcNode – Superdrac

+1

No funciona. Ni siquiera hay función hide() en dijit/Dialog.js. – peterh

1

Puede anular onCancel() método como se menciona anteriormente, o se puede adjuntar al evento dijit.dialog.closeButtonNode DOMElement. dijit.dialog.closeButtonNode es el nombre del atributo data-dojo-attach-point para el botón de cerrar.

Exp:

dojo.on(dijit.Dialog.closeButtonNode, "click", function(evt){ 
     //add your logic here 
}); 
Cuestiones relacionadas