我正在寻找一种在我的GWT项目中集成CKEditor的方法。
我做了一些谷歌搜索并找到了这个项目:https://code.google.com/p/gwt-ckeditor/ 已被遗弃多年。所以CKEditor完全过时了。
我还看到CKEditor在GWT之外加载到GWT中创建的textarea中。我不确定这是不是一个好方法。
如果有人可以给我一些建议,我们将非常感激。 谢谢提前
答案 0 :(得分:5)
您可以使用JSNI激活CKEditor。 要加载javascript文件,请在html页面中加载,或使用ScriptInjector和StyleInjector。
在GWT中,创建一个组件:
package com.google.editor;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.TakesValue;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.TextArea;
public class CKeditor extends Composite implements TakesValue<String> {
TextArea text = new TextArea();
protected JavaScriptObject editor;
public CKeditor() {
initWidget(text);
}
@Override
protected void onAttach() {
super.onAttach();
initCKEditor(text.getElement().getId());
}
private native void initCKEditor(String id) /*-{
this.@com.google.editor.CKeditor::editor = CKEDITOR.replace( id );
}-*/;
@Override
public native void setValue(String value) /*-{
this.@com.google.editor.CKeditor::editor.setData(value);
}-*/;
@Override
public native String getValue() /*-{
this.@com.google.editor.CKeditor::editor.setData(value);
}-*/;
}
这是一个示例,添加您要在CKEditor中设置的所有配置
答案 1 :(得分:3)
我还建议使用ScriptInjector,因为它会给你一个回调,脚本最终加载了,一切都很好。
此后你必须使用$ wnd正确地解决CKEDITOR并用原生代码替换textarea:
private native void initCKEditor(String id) /*-{
this.@com.google.editor.CKeditor::editor = $wnd.CKEDITOR.replace( id );
}-*/;
答案 2 :(得分:1)
Patrice的答案非常有用,但它最初对我不起作用,因为TextArea text = new TextArea();正在创建一个没有id字段的TextArea。为了解决这个问题,我只需手动添加一个id字段:
text.getElement().setId("make_up_an_id_name_here");
还要确保将ckeditor文件夹放在war目录中。
如果您选择在project_name.html文件中链接到它,请在插入主... nocache.js脚本的行上方添加此行:
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
答案 3 :(得分:0)
text.getElement()SETID(DOM.createUniqueId());