我正在primefaces框架的帮助下开发web界面。
在该接口中,目标之一是将代码划分为javascript函数,这些函数之间不共享信息,也不允许由其他部分调用(这简化了测试,降低了可能用例的数量和复杂性)。所有"零件"均使用封装
(function (window, document, undefined){
var $ = window.jQuery;
// main content here
})(window,document);
每个部分之间所需的通信是最小的,并且所需的一个通信是使用DOM事件进行的,其中对象在彼此之间传递。(如果事件没有被捕获,那只是一个功能没有起作用。如果它导致了一些东西损坏,js不会停止工作,还有其他原因)。
这已经工作了很长一段时间,发现的错误很少,直到我不得不使用jsf+primefaces
通过阅读文档,primefaces有许多XML标记,这些标记并不映射到HTML标记。其中一个我必须与之合作的主要是<p:ajax>
。
这个标签有很多类似on*的属性,其概念与HTML3在HTML的"on*"属性中编写javascript的思想非常相似。尽管如此,这些<p:ajax>
总是附加到特定的XML元素,如<h:inputText>
或<p:commandButton>
,这就是我开始研究的地方
在primefaces文档中,有关于内联on*属性的信息,但我完全找不到关于jsf或primefaces的个性化DOM事件的信息。
它在素数面中的表现,我不得不更改javascript代码,以便在HTML中内联调用函数/方法。这将需要大量的工作,因为根据情况,js代码甚至可能不在那里(因为该页面不需要它所启用的功能)。
如何在primefaces上创建系统,使javascript与jsf/PrimefacesXML(以及我可以管理的整个HTML输出)完全分离。
编辑:我已经没有了在哪里看的想法,现在我将研究素数面源代码。我可能在那里运气更好。
编辑:同时,我得到了一些使用不同关键字进行搜索的想法,我发现了这一点(请参阅:"客户端API"):
http://courses.coreservlets.com/Course-Materials/pdf/jsf/primefaces/users-guide/p-ajaxStatus.pdf
这接近我想要的,但对于我上面提到的元素来说,它似乎并不存在。我会继续寻找更多。
经过一些测试、调查等……我终于能够理解所发生的一切。
Primefaces毕竟做得很好!<p:ajax>
具有正确的代码来发送它应该发送的所有事件!问题出在jQuery本身。
jQuery的trigger()
方法(及其快捷方式)的工作方式是,它直接处理jQuery内部的所有事件,冒泡并调用使用on()
(或任何快捷方式)注册的回调。
jQuery中的主要问题是,它只向DOM重新发送"点击"事件,因为它试图在DOM元素中使用与该事件同名的方法。在DOM中,(目前)发生这种情况的唯一情况是"单击"事件。这就是为什么我得到的是点击事件,而不是其他事件。
有了这些,迷雾和困惑终于解决了。uff!