为什么Primefaces 5.3中的AJAX更新有效

时间:2015-10-26 14:58:18

标签: primefaces

我使用的是Primefaces 5.0,当我用AJAX更新p:selectCheckboxMenu时,它停止了工作。经过一些研究后,我开始明白它的监听器被破坏了,因为HTML DOM树注入了新的HTML组件(在AJAX响应中返回),并且因为ready()没有重新调用,所以没有重新附加监听器。

当我升级到Primefaces 5.3(使用相同的代码)时,AJAX更新开始工作。

我认为他们已经取代了 $(selector).on(event,function){...} with $(document).on(event,selector,function){...},将侦听器绑定到文档而不是组件......但是他们保留了$(选择器).on(事件,函数){...}方法!

关于他们如何解决这个问题的任何想法?那么听众如何附加到新组件?

1 个答案:

答案 0 :(得分:0)

由于转义的客户端ID,更新正在运行。按照@Kukeltje的建议重写刷新功能后,我可以测试一下。 PrimeFaces.escapeClientId函数它是一个js函数,用双反斜杠替换冒号“:”。由于这个更正,Primefaces 5.3中的AJAX更新正常工作!

出于测试目的,我覆盖了SelectCheckboxMenu的刷新功能,添加了一个打印以确保它被调用并用5.0刷新替换了5.3刷新。

PrimeFaces.widget.SelectCheckboxMenu.prototype.refresh = function(a) {
        console.log('method overriden!');
        $(this.panelId).remove();
        this.init(a)
}

如怀疑,刷新停止工作,确认ID之前没有被转义!