我正在使用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。这是用户将看到的内容。
答案 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");