【问题标题】:Reloading Javascript after AJAX JSF requestAJAX JSF 请求后重新加载 Javascript
【发布时间】:2015-05-25 13:29:30
【问题描述】:

好吧,我正在使用 TinyMCE 编辑器,当我尝试打开模式对话框时,不会呈现 tinyMCE。

看:

$(document).ready(function() {

    jQuery('.tinymce').on('show',function(e){
        initTinymce();
    });

});

function initTinymce(){
    tinymce.init({
        selector: ".tinymce",
        plugins: [
            "advlist autolink lists link image charmap print preview anchor",
            "searchreplace visualblocks code fullscreen",
            "insertdatetime media table contextmenu paste"
        ],
        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
    }); 
}

我的页面:

<div class="form-group">
                                <label>Conteúdo *</label>
                                <h:inputTextarea value="#{cursoMB.paginaConteudo.conteudo}"
                                    id="conteudo" required="true"
                                    requiredMessage="O conteúdo é obrigatório"
                                    styleClass="form-control tinymce">
                                </h:inputTextarea>
                            </div>

我的 ajax 调用:

<h:commandButton styleClass="btn btn-default" type="button"
                            value="Criar Página"
                            actionListener="#{cursoMB.novaPaginaConteudo()}">
                            <f:passThroughAttribute name="data-toggle" value="modal" />
                            <f:passThroughAttribute name="data-target"
                                value="#modalDialogPagina" />
                            <f:ajax execute="@this" render="modalPagina" />
                        </h:commandButton>

我该如何解决这个问题?

编辑 1

我尝试使用 jsf.ajax.addOnEvent 但也没有用,tinyMCE 没有渲染(console.log 显示正常):

$(document).ready(function() {

    initTinymce();
    jsf.ajax.addOnEvent(ajaxHandleTinymce);
});

function ajaxHandleTinymce(data){
    console.log('ajaxHandle');
    initTinymce();
}

function initTinymce(){
    tinymce.init({
        selector: ".tinymce",
        plugins: [
            "advlist autolink lists link image charmap print preview anchor",
            "searchreplace visualblocks code fullscreen",
            "insertdatetime media table contextmenu paste"
        ],
        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
    }); 
}

【问题讨论】:

    标签: javascript ajax jsf jsf-2


    【解决方案1】:

    您必须在 ajax 调用之后初始化您的小部件,您可以通过这种方式在 f:ajax 上附加一个 javascript 事件侦听器:

    <f:ajax execute="@this" render="modalPagina" onevent="handleAjaxResponse"/>
    
    function handleAjaxResponse(data) {
       if (data.status === 'success') {
          initTinymce();
       }
    }
    

    我不建议对您的情况使用 jsf.ajax.addOnEvent 回调,因为每次对服务器进行 ajax 调用时,小部件都会初始化。

    【讨论】:

    • 我试过这个但没有用。 tinyMCE 未渲染。我在 handleJaxResponse() 中放了一个 console.log,这被正常调用了。
    • 可能是initTinymce()函数有问题,你能不能在ajax调用后在浏览器控制台手动执行initTinymce()函数来检查是否有错误显示
    • 好吧,我在控制台中执行了“initTinymce()”并得到:未定义。如果我执行“initTinymce”,我会得到函数代码作为返回
    • 是的,没关系,它显示未定义,因为函数没有返回值,但在执行函数 initTinymce() 后,小部件正确显示;
    • 不开心,当我在浏览器控制台中执行 initTinymce() 时,模式对话框小部件在没有编辑器的情况下继续。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多