如何在PrimeFaces中的命令按钮上定义带有闭包的oncomplete事件
How do I define a oncomplete event on a CommandButton in PrimeFaces with a closure?
我正在用一些JavaScript交互性扩展PrimeFaces应用程序的一部分。这一切都始于 CommandButton
它从 bean 中获取一些数据并调用然后调用 JavaScript。目前,它看起来像这样:
<p:commandButton actionListener="#{myBean.doSomething}"
oncomplete="doSomethingSimple()"
value="Do something" />
当然,这是非常简单的基于函数的编程。没有上下文,没有闭包,没有OOP(如果我需要一些)。我想将一个普通的 JavaScript 事件附加到CommandButton
,例如像这样使用 jQuery:
$('.myCommandButton').on('complete', function () {
...
})
但是,complete
不是DOM事件,基本上,只有PrimeFaces知道何时调用它。还有没有办法用"普通"的JavaScript事件处理来替换基于属性的脚本?
PrimeFaces在幕后使用jQuery来处理ajax请求。因此,可以挂在通用$.ajaxComplete()
处理程序上。源代码可用作第三个参数的属性options
:
$(document).ajaxComplete(function(event, xhr, options) {
var $source = $("[id='" + options.source + "']");
if ($source.hasClass("myCommandButton")) {
// ...
}
});
或者,如果您使用的是PrimeFaces 4.0或更高版本,请关注PrimeFaces特定的pfAjaxComplete
事件:
$(document).on("pfAjaxComplete", function(event, xhr, options) {
var $source = $("[id='" + options.source + "']");
if ($source.hasClass("myCommandButton")) {
// ...
}
});
或者,如果您将PrimeFaces与"纯"HTML/jQuery混合使用,并希望同时应用于两者:
$(document).on("ajaxComplete pfAjaxComplete", function(event, xhr, options) {
var $source = $("[id='" + options.source + "']");
if ($source.hasClass("myCommandButton")) {
// ...
}
});
无论采用何种方式,$source
都表示触发 ajax 操作的原始 HTML DOM 元素的 jQuery 对象,在此特定示例中,<p:commandButton>
本身就是此对象。这为您提供了将其进一步委托给所需处理程序的可能性,例如检查元素的类。
在PrimeFaces 4.0中,ajaxComplete
被替换为pfAjaxComplete
。有关更多详细信息,请参阅问题 5933。
话虽如此,我能够让它按如下方式工作:
$(document).on('pfAjaxComplete', function() {
foo.bar()
});
- 为Google闭包类定义属性的首选方式是什么
- 这是一种捕获闭包定义堆栈的方法吗
- 在 For 循环中的闭包中未定义
- 高级闭包兼容性和静态类型 - 使用未定义类型和全局函数,如localStorage.getItem();
- 闭包编译器 - 保留未使用的函数,不要重命名未定义的函数
- 仅在闭包中定义的模拟/存根对象
- 在其他地方定义的 JavaScript 闭包
- 如何在PrimeFaces中的命令按钮上定义带有闭包的oncomplete事件
- Javascript 闭包(使用参数名称在同一函数中定义对象)
- Google闭包在高级模式下调用未定义的函数
- 使用闭包编译器键入indexOf重新定义
- C#Asp.net自定义控件的Javascript闭包
- 使用闭包创建的私有函数如何访问构造函数中定义的变量
- 为什么我必须在闭包中声明一个函数来访问闭包中定义的变量
- 无法创建闭包中定义的函数的对象
- 获得'未定义'使用闭包工具继承时出现属性错误
- 传递给闭包的角度参数未定义
- 从外部(即定义闭包的作用域)访问闭包内部定义的var
- 在解析时定义闭包函数
- 在生成过程中将代码包装在自定义闭包中