我四处找了找,对我的基本问题找不到一个直接的答案。
我们有一个网站,其中应用了一堆基本的css类元素使用jQuery在document.ready()。
但是现在我们也开始使用JSF 2.0和facelets,并且有一些f:ajax标签,它们根据事件呈现页面的某些部分。可以想象,重新呈现的部件没有这些样式,因为在ajax调用期间没有再次调用jQuery函数。
我现在玩了一下,发现可以添加onevent到f:ajax,并强制再次调用jQuery主函数。但这感觉不是很优雅,我需要将它添加到所有的f:ajax标记中。另外,我遇到了一些无法解释的行为。
我的问题是:
- 在document.ready()中应用样式类是否仍然有意义?或者在这种情况下,这是不好的做法?我应该简单地将类添加到元素中吗? jQuery ajax是f:ajax的可行替代方案吗?
谢谢
我现在已经玩了,发现你可以添加onevent到f:ajax和强制主jQuery函数再次调用。但这感觉不是很优雅,我需要将它添加到所有的f:ajax标签中。
您可以使用jsf.ajax.addOnEvent()
将其应用于所有<f:ajax>
请求。参见如何重新执行javascript函数后的形式渲染?
在document.ready()中应用样式类是否仍然有意义?或者在这种情况下,这是不好的做法?我应该简单地将类添加到元素中吗?
这确实表明了一个设计/思维问题。例如,为什么不直接使用那些jQuery选择器而不是打算添加的CSS类呢?要向某些元素添加CSS类,无论如何都必须使用CSS选择器选择它们,对吗?为了最终目的而使用CSS选择器有什么错呢?
在Facelets透视图中,您可以考虑创建标记文件来减少代码样板。您可以将<h:inputText styleClass="some-specific-class">
包裹在/WEB-INF/tags/inputText.xhtml
中,并继续使用<my:inputText>
。
jQuery ajax是f:ajax的可行替代方案吗?
这是可行的。甚至还有开源的例子,比如围绕jQuery和jQuery UI构建的PrimeFaces。