我試圖在實例完全加載後將我的CKEditor實例設置爲「只讀」,但出現Javascript錯誤:Cannot call method 'setReadOnly' of null
。當我深入研究時,錯誤來自ckeditor.js中的這一行,在editor.setReadOnly
方法中:this.editable().setReadOnly(a);
這意味着編輯器存在,但方法/屬性(在CKEditor實例上)不存在。setReadOnly在CKEditor的instanceReady上調用時會導致錯誤
下面是我的代碼,我會稍微解釋一下。我的應用程序是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();
}
}
的骨幹類有Namespace.Events.SET_ENABLED
監聽器觸發setEnabled
。
是否有另一個CKEditor事件我應該聽? editable
上似乎沒有instanceReady
事件。我錯過了什麼?
編輯
this.editor
在骨幹類render
功能創建這樣的:
this.editor = CKEDITOR.replace(this.$(this.id)[0], config);
的原因,我不添加instanceReady
監聽它的創建後立即被因爲功能setEnabledOnLoad
被稱爲GWT在實例完全初始化之前。這是兩個地方的代碼的結果。 GWT已經說過「確定,創建實例」,但Backbone在GWT進入下一行代碼並且想要將其設置爲啓用/禁用時尚未完成。
'CKEDITOR'不包含所有實例,但它也做了很多。我沒有將'instanceReady'監聽器添加到實例中的原因是因爲在實例創建之前調用了函數'setEnabledOnLoad'。這是兩個地方的代碼的結果。 GWT已經說過「確定,創建實例」,但Backbone在GWT進入下一行代碼並且想要將其設置爲啓用/禁用時尚未完成。 –
我承認我缺乏關於Backbone和GWT的正確知識來進一步回答我的問題:]希望有人可以跳進去。 – Noseratio