监听 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!");
    });
});

完美运行。