将tinyMCE用于模态窗口

时间:2011-12-13 09:37:57

标签: javascript jquery grails tinymce

我正在使用Grails 1.3.7并且我通过richui使用tinyMCE。我正在尝试显示一个模式窗口,使用户可以发送邮件。但是,如果正确显示tinyMCE,则由于此错误,我无法使用文本编辑器:

  

t.win.document为空

我终于找到了原因,在文章的最后: http://blog.mirthlab.com/2008/11/13/dynamically-adding-and-removing-tinymce-instances-to-a-page/ 看来,当我使用构建模态窗口的jquery脚本调用页面时,DOM不会刷新,也不会创建相应的textarea。

无论如何我不知道如何解决这个问题,所以这是我的代码:

Jquery代码:

function dialogSendFirstMail(id) {
var monurl = "/myApp/emailTemplate/writeFirstMail.gsp?id_for_mail="+id;
var titre = "Premier email"
//alert(monurl);
$("#dialogSendFirstMail").load(monurl, function() {
    $(this).dialog({
        height: 'auto',
        width:'auto',
        modal: true,
        position: 'center',
        overlay: {
            backgroundColor: '#000',
            opacity: 0.5
        },
        title:titre
    });
});
}

GSP调用模态窗口的脚本:

<!-- ... -->
<g:if test="${params.sendFirstMail}" >
  <div id="dialogSendFirstMail"></div>
  <script>dialogSendFirstMail(${idProfil});</script>
</g:if>
</body>

模态窗口(暂时只有这个):

<richui:richTextEditor name="firstMail" value="%Email_de_bienvenue%"/>

总之,如果我发现我必须发送第一封邮件,该页面会创建一个div,其中放置了tinyMCE。这是用户将看到的内容。

1 个答案:

答案 0 :(得分:0)

正如您所提到的,您错误“t.win.document为null”的原因是因为DOM未刷新。因此,在加载模式对话框时,必须显式添加tinyMCE控件。您可以在gsp中使用类似的东西来渲染richUI编辑器(在您的情况下为writeFirstMail.gsp):

    jQuery(document).ready(function() {
    //your tinyMCE settings here 
    tinyMCE.settings = {
        mode : "textareas",
        theme : "simple",
        editor_selector : "mcesimple",
        width: 400

    };

    tinyMCE.execCommand("mceAddControl", false, "yourTextareaId");
    });

关闭对话框后,您可以使用以下命令从textarea中删除tinyMCE控件:

    tinyMCE.execCommand("mceRemoveControl", false, "yourTextareaId");