监听 Apache Tapestry 表单事件
Listening on Apache Tapestry form events
我是一名后端开发人员,最近继承了几个遗留的 Apache Tapestry 系统。我在 Tapestry 方面的技能是我在 javascript 媒体上的知识。
我想在提交之前禁用提交按钮以避免多次提交。
很简单
$(document).ready(function () {
$("#form").submit(function () {
$("#submitbutton").attr("disabled", true);
return true;
});
});
方法不会执行,因为提交事件在 Tapestry 执行客户端验证之前传播,所以我可以禁用验证失败的提交尝试上的按钮。
关于 this 的问题,我了解到 Tapestry 也传播它自己的事件,如果我可以在 tapestry:formprocesssubmit
上收听,那可能会解决我的问题。
我的 CreateContract.tml
文件中的表单、字段和按钮已经可以使用,我的 CreateContract.java
文件中
@Import(library = {
"context:js/jquery.mask.min.js",
"context:js/maintain-contracts.js",
"context:js/zone-overlay.js"},
stylesheet = "context:layout/zone-overlay.css")
还有我的 maintain-contracts.js
文件
$(document).ready(function () {
$("#form").on('tapestry:formprepareforsubmit', function () {
console.log("I want to arrive here!");
});
});
但是没有用。
在 this 邮件列表线程上,我看到人们在讨论非常相似的问题,但他们以不同的方式收听事件,我不太了解。
我应该在初始化程序中创建侦听器吗?
我将事件引用为 'tapestry:formprepareforsubmit'
而不是 Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT
因为在我的 maintain-contracts.js
和我的控制台上 Tapestry 变量都是空的 - 这是为什么?
.on
与 .bind
与 .observe
三分法呢?
first links 的问题已使用 ProptypeJS
Class.create 解决,但我想我无法访问它。
我做错了吗?
谢谢,如有任何帮助,我们将不胜感激。
不是分析你的方法为什么不起作用,而是一个有用的参考:
Tapestry JumpStart 的创建者 Geoff Callender 对如何使用 mixin 避免重复提交表单进行了出色的描述。
见http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/creatingmixins1
阅读 Tapestry 的源代码后,我发现该事件不是 tapestry:formprepareforsubmit
,而是 t5:form:prepare-for-submit
,尽管我在任何地方都找不到相关文档。
所以
$(document).ready(function () {
$("#form").on('t5:form:prepare-for-submit', function () {
console.log("I want to arrive here!");
});
});
完美运行。
我是一名后端开发人员,最近继承了几个遗留的 Apache Tapestry 系统。我在 Tapestry 方面的技能是我在 javascript 媒体上的知识。
我想在提交之前禁用提交按钮以避免多次提交。 很简单
$(document).ready(function () {
$("#form").submit(function () {
$("#submitbutton").attr("disabled", true);
return true;
});
});
方法不会执行,因为提交事件在 Tapestry 执行客户端验证之前传播,所以我可以禁用验证失败的提交尝试上的按钮。
关于 this 的问题,我了解到 Tapestry 也传播它自己的事件,如果我可以在 tapestry:formprocesssubmit
上收听,那可能会解决我的问题。
我的 CreateContract.tml
文件中的表单、字段和按钮已经可以使用,我的 CreateContract.java
文件中
@Import(library = {
"context:js/jquery.mask.min.js",
"context:js/maintain-contracts.js",
"context:js/zone-overlay.js"},
stylesheet = "context:layout/zone-overlay.css")
还有我的 maintain-contracts.js
文件
$(document).ready(function () {
$("#form").on('tapestry:formprepareforsubmit', function () {
console.log("I want to arrive here!");
});
});
但是没有用。 在 this 邮件列表线程上,我看到人们在讨论非常相似的问题,但他们以不同的方式收听事件,我不太了解。
我应该在初始化程序中创建侦听器吗?
我将事件引用为 'tapestry:formprepareforsubmit'
而不是 Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT
因为在我的 maintain-contracts.js
和我的控制台上 Tapestry 变量都是空的 - 这是为什么?
.on
与 .bind
与 .observe
三分法呢?
first links 的问题已使用 ProptypeJS
Class.create 解决,但我想我无法访问它。
我做错了吗?
谢谢,如有任何帮助,我们将不胜感激。
不是分析你的方法为什么不起作用,而是一个有用的参考:
Tapestry JumpStart 的创建者 Geoff Callender 对如何使用 mixin 避免重复提交表单进行了出色的描述。
见http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/creatingmixins1
阅读 Tapestry 的源代码后,我发现该事件不是 tapestry:formprepareforsubmit
,而是 t5:form:prepare-for-submit
,尽管我在任何地方都找不到相关文档。
所以
$(document).ready(function () {
$("#form").on('t5:form:prepare-for-submit', function () {
console.log("I want to arrive here!");
});
});
完美运行。