首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RichFacesa4j:loadScript清除ajax调用上的jQuery插件

问RichFacesa4j:loadScript清除ajax调用上的jQuery插件
EN

Stack Overflow用户
提问于 2011-08-26 16:40:06
回答 1查看 3.8K关注 0票数 4

我正在将嵌入到jQuery中的RichFaces加载如下:

代码语言:javascript
复制
<a4j:loadScript src="resource://jquery.js"/>

接下来,我将使用以下内容加载FancyBox jQuery插件:

代码语言:javascript
复制
<script type="text/javascript" src="/App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

当第一次加载页面时,插件工作正常,但是在执行ajax调用之后

代码语言:javascript
复制
<a4j:jsFunction name="myMethod" data="#{myController.jsonDataToReturn}" action="#{myController.doSomething()}" oncomplete="populateData(data);">     
  <a4j:actionparam name="selectedTag" assignTo="#{myController.selectedTag}"/>
</a4j:jsFunction>

插件停止工作了。测试表明,每个ajax调用都会重新加载a4j:loadScript标记,从而重新加载失去附加插件的jQuery变量。

当前的解决方法是通过在页面的某个位置放置一个jQuery标记来加载<rich:jQuery query="fn" />。它除了强制jQuery加载之外什么也不做,但是由于它不使用a4j,所以jQuery不会在ajax调用中重新加载。

但是,有一个干净的解决办法吗?我使用的是RichFaces 3.3.3,其中包括jQuery 1.3.2。

更新

加载FancyBox的有:

代码语言:javascript
复制
jQuery(document).ready( function(){
    jQuery('.fancyboxLink').live('click',aclick);
});

function aclick(){
    jQuery.fancybox({
        href: '#{facesContext.externalContext.requestContextPath}/webpage.xhtml',
            type:'iframe',
            width:710,
            height:510,
            padding:0,
            margin:0,
            hideOnOverlayClick:false,
            overlayColor:'#000'
    });
    return false;
}

第一次ajax调用之后,jQuery不再包含fancybox。

EN

回答 1

Stack Overflow用户

发布于 2011-08-29 18:26:34

首先,需要在每个ajax请求上加载脚本,为此使用a4j:loadScript。

代码语言:javascript
复制
<a4j:loadScript src="/App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

第二:在组件被重命名时执行该fancybox脚本(ajax调用,它将包含元素的dom树的一部分更改为fancybox)。我会通过编写一个定制的facelets组件来做到这一点,就像这样。

fancyInput.xhtml:

代码语言:javascript
复制
<ui:component xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:c="http://java.sun.com/jstl/core">

    <a4j:loadScript src="resource:///App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

    <!-- id is passed by component's client as facelet param. -->
    <h:commandButton id="#{id}" otherParameters="....."/>
    <script type="text/javascript">
        jQuery(function() {
            // Attaching fancybox to rendered component.
            jQuery($('#{rich:clientId(id)}')).live('click',aclick);
        });
    </script>
</ui:component>

您的页面:

代码语言:javascript
复制
<ui:include src="fancyInput.xhtml">
    <ui:param name="id" value="anId"/>
    <ui:param name="otherParams" value="..."/>
</ui:include>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7207901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档