我试图在实例完全加载后将我的 CKEditor 实例设置为“只读”,但我收到了一个 Javascript 错误:Cannot call method 'setReadOnly' of null
. 当我深入研究它时,错误来自 ckeditor.js 中的这一行,在editor.setReadOnly
方法中:this.editable().setReadOnly(a);
这意味着编辑器存在,但editable
方法/属性(在 CKEditor 实例上)不存在。
下面是我的代码,我会稍微解释一下。我的应用程序是 GWT 和 Backbone 的组合。CKEditor 本身是由 Backbone 代码创建的,但父元素位于 GWT 中,因此我在此启动setEnabled
操作。
private native void setEnabledOnLoad(boolean enabled, String id) /*-{
CKEDITOR.on("instanceReady", function(evt) {
if(evt.editor.name === id) {
Namespace.trigger(Namespace.Events.SET_ENABLED, enabled);
}
});
}-*/;
setEnabled: function(enabled) {
this.editor.setReadOnly(!enabled);
if(enabled){
this.editor.focusManager.focus();
} else {
this.editor.focusManager.blur();
}
}
Backbone 类有一个用于Namespace.Events.SET_ENABLED
触发的侦听器setEnabled
。
我应该听另一个 CKEditor 事件吗?上似乎没有instanceReady
活动editable
。我错过了什么?
EDIT
this.editor
在 Backbone 类render
函数中创建,如下所示:
this.editor = CKEDITOR.replace(this.$(this.id)[0], config);
我没有在instanceReady
创建后立即添加侦听器的原因是因为在setEnabledOnLoad
实例完全初始化之前在 GWT 中调用了该函数。这是将代码放在两个地方的结果。GWT 说“好的,创建实例”,但是当 GWT 进入下一行代码并想要将其设置为启用/禁用时,Backbone 还没有完成。