我试图在Rails 4.0.3中使用CKEditor gem。我根据文档设置了所有内容,但它不起作用。
我有一个主项目,其中包含许多html元素的页面。在此页面中,CKEditor不起作用,并且不会在服务器端或客户端(Javascript)上发出任何错误或警告。
但是当我创建一个测试项目并应用相同的设置时,它就有效了!
经过大量的挣扎,我终于得出了这个结论:CKEditor在应该转换的textarea之后插入一些Javascript。这是代码:
//<![CDATA[
if (typeof CKEDITOR != 'undefined') { CKEDITOR.replace('article_body'); }
//]]>
我认为问题在于,在包含许多html元素的页面上,上面的代码在DOM完全加载之前运行,因此它没有任何效果。但是在另一个页面上,DOM会快速加载并且代码会及时运行。
验证我的假设的一件事是,如果我在Chrome开发者工具中运行上面的Javascript代码&#39;控制台,当页面完全加载后,它确实有效。
我不知道我是否正确,但假设我是对的,如何在DOM完全加载时强制执行上面的代码?
答案 0 :(得分:0)
我发现了问题。这是因为我搬了
<%= stylesheet_link_tag "application" %>
在结束体标记之前行到文件末尾。这一行:
//<![CDATA[
if (typeof CKEDITOR != 'undefined') { CKEDITOR.replace('article_body'); }
//]]>
在加载任何其他Javascript文件之前执行,因此它什么也没做。
解决方案:
一种方法是将stylesheet_link_tag
行移至文件顶部(我不喜欢)。
另一种方法是将名为ckeditor
的CSS类添加到要转换的textarea中。例如:
= form_for @article do |f|
= f.text_area :body, class: "ckeditor"
这将告诉CKEditor将该textarea转换为WYSIWYG编辑器。