2017-02-24 19 views
0

我試圖將CKEditor集成到SPA(單頁應用程序)的頁面中。CKEditor(在SPA中)在導航回編輯頁面時凍結

第一次訪問時,CKEditor在SPA頁面中的行爲正確,但在下次訪問時沒有發生。例如,當按下向後瀏覽器箭頭(顯示前一個SPA頁面),然後按向前箭頭(再次顯示帶有CKEditor的SPA頁面)時,CKEditor將出現,但內容已被刪除且不再反應。在文本區域登錄時沒有卡爾特。而且所有的API調用(如setData()或resize())都不再有效果(而他們正在進行第一次訪問)。

我認爲CKEditor不喜歡將其元素從DOM中刪除(這是切換到另一個頁面時發生的情況),然後重新添加到DOM(這是再次訪問該頁面時發生的情況)。

請編輯2017年7月5日

感謝您的建議,以離開該頁面時銷燬的CKEditor和導航回來時重建它,但是這會導致失去了編輯狀態,如滾動條的位置,插入符號位置,文本選擇等...

理想情況下,我想讓用戶在編輯器中編寫某些內容時(例如查看信息或從另一個頁面複製內容),然後在他導航bac時繼續確切的位置(滾動條,插入符號,選擇......沒有變化) k給編輯。

是有可能嗎?

+0

我製作了這個[fiddle](https://jsfiddle.net/ykspc3mo/)來幫助重現問題 – Bruno

+0

[如何正確銷燬CKeditor實例](https://stackoverflow.com/questions/3613215 /如何正確銷燬ckeditor實例) –

+0

謝謝Marek,但我正在尋找一個更好的解決方案,如果可能的話(請參閱我的編輯7月5日) – Bruno

回答

0

僅僅通過移除它的父容器就像在你的小提琴中去除CKEditor並不是一個好的解決方案,因爲CKEditor將一些監聽器附加到DOM上,並通過刪除容器來分離那些未被重新連接的監聽器。

在從DOM中刪除然後重新創建它之前,您應該編輯destroy。請記住,銷燬是以異步方式發生的,因此要知道何時完成,您可以聽取destroy event

這裏修改fiddle使用destroy方法(沒有處理destroy事件應該被添加)。

請編輯2017年7月10日

要保留編輯器(滾動條的位置,文本選擇等)的狀態之間的破壞 - 重建,所有這些元素的國家應該銷燬編輯器之前被保留,然後設置重新創建後。這是可行的,但需要一些工作和相當多的自定義代碼。

理想情況下,我想有可能使用戶能夠訪問其他網頁,而他是在編輯器寫東西的中間

因爲要創建一個SPA應用,上述更好的解決方案是使用一些浮動/固定容器,其中放置了CKEditor,並且在導航時不會與頁面的其餘部分重新加載(例如與Facebook聊天工作相同)。

還要記住,重新創建CKEditor需要一些時間(很短,但它仍然可見),所以在每個頁面導航中,用戶都可以看到編輯器正在發生的事情,即使它的狀態沒有改變。

+0

謝謝,但我正在尋找更好的解決方案(如果可能的話)(請參閱我的編輯7月5日) – Bruno