Soy un desarrollador de back-end y recientemente heredé un par de sistemas Apache Tapestry heredados. Mis habilidades con Tapestry son nulas, mi conocimiento en el medio javascript.
Quiero deshabilitar un botón de envío justo antes de que se realice el envío para evitar envíos múltiples. un muy simple
$(document).ready(function () { $("#form").submit(function () { $("#submitbutton").attr("disabled", true); return true; }); });El enfoque no funcionará porque el evento de envío se propaga antes de que Tapestry realice la validación del lado del cliente, por lo que podría estar deshabilitando el botón en un intento de envío que fallará la validación.
Sobre esta pregunta, aprendí que Tapestry también propaga sus propios eventos, y si pudiera escuchar tapestry:formprocesssubmit Eso probablemente resolvería mi problema.
Tengo mi archivo CreateContract.tml con el formulario, campos y botones que ya funcionan, tengo mi archivo CreateContract.java con
@Import(library = { "context:js/jquery.mask.min.js", "context:js/maintain-contracts.js", "context:js/zone-overlay.js"}, stylesheet = "context:layout/zone-overlay.css") Y mi archivo maintain-contracts.js con
$(document).ready(function () { $("#form").on('tapestry:formprepareforsubmit', function () { console.log("I want to arrive here!"); }); });Pero no funciona. En este hilo de la lista de correo, veo personas discutiendo asuntos muy similares, pero escuchan los eventos de una manera diferente, que no entiendo del todo.
¿Debo crear el oyente dentro del inicializador?
Me refiero al evento como 'tapestry:formprepareforsubmit' en lugar de Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT porque tanto en mi sustain maintain-contracts.js como en mi consola, la variable Tapestry está vacía. ¿Por qué?
¿Qué pasa con la tricotomía .bind .on .observe ?
La pregunta de los primeros enlaces se resolvió usando ProptypeJS Class.create, pero creo que no tengo acceso a eso.
¿Estoy haciendo eso mal?
Gracias, cualquier ayuda es apreciada.
No es un análisis de por qué su enfoque no funciona, pero no obstante, es una referencia útil:
Geoff Callender, creador de Tapestry JumpStart , tiene una excelente descripción de cómo se pueden evitar los envíos de formularios duplicados usando un mixin.
Consulte http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/creatingmixins1
Después de leer el código fuente de Tapestry, descubrí que el evento no se llama tapestry:formprepareforsubmit , sino t5:form:prepare-for-submit , aunque no encontré documentación al respecto en ninguna parte.
Asi que
$(document).ready(function () { $("#form").on('t5:form:prepare-for-submit', function () { console.log("I want to arrive here!"); }); });Funciona perfectamente.