2015-03-02 26 views
3

我在我的Angular應用程序中使用CKEditor,並且每次用戶訪問新模型時都會重新加載CKEditor實例。CKEditor新實例始終卸載

我使用以下JS初始化編輯:

var initEditor = function() { 
    $('.js-editor-wrap').html("<textarea id='editor'></textarea>"); 

    var editor = CKEDITOR.replace('editor', {}); 

    editor.on('loaded', function() { 
    console.log('editor loaded'); 
    }); 

    editor.on('instanceReady', function() { 
    console.log('instance ready') 
    }); 
} 

而下面摧毀編輯:

var destroyEditor = function() { 
    if (CKEDITOR.instances['editor']) { 
    CKEDITOR.instances['editor'].destroy(true); 
    $('#editor').off().remove(); 
    } 
} 

第一位編輯初始化工作只是預期,但隨後的初始化創建一個狀態爲「未加載」的編輯器實例,該實例永遠不會觸發「已加載」或「實例準備」事件。我在控制檯中看不到任何錯誤。

任何想法可能導致這種情況?

這絕對是一個類似的問題在下面,但也足夠不同,我認爲它保證其自身的問題:CKEditor instance already exists

+1

我猜你有一個不同的問題,因爲只有你提供的代碼每次都像你想要的那樣工作(見這個小提琴:http://jsfiddle.net/6bs3cjo8/)。所以很難說你的具體問題可能是什麼。你可以嘗試通過將你的編輯器實例定義爲全局變量來解決這個問題(如果這可能在你的情況下)(參見這個小提琴的例子:http://jsfiddle.net/v0rn1Low/1/) - 或者更好一點返回它作爲'initEditor()'的句柄並傳遞給'destroyEditor()'。 – 2015-03-06 14:53:39

+0

是的,我擔心你需要放置更多的代碼 - 調用'initEditor'和'destroyEditor'的函數。 – 2015-03-08 10:32:03

回答

2

很多更挖掘並感謝來自JEY Dwork中的jsfiddle之後,我想通了其中問題在這裏。我的CKEditor配置文件添加了一些插件,這些插件引用了不正確命名的lang文件。出於某種原因,當這些插件被包含在一起時,它們導致編輯器在第二次初始化期間未完全加載。

刪除lang文件並在插件定義中引用它們可解決問題。這太糟糕了,沒有一些錯誤是由此引發的。儘管如此,一切都很好。