2016-02-05 81 views
5

我正在使用CKEditor的小部件功能來創建我自己的小部件,並在其中包含jQuery組件。但是,當小部件被拖放時,它會被破壞,並且jquery組件中的所有狀態都會丟失。 可以避免這種行爲?它是可配置的嗎?爲什麼這是必需的(也許CKEditor團隊可以回答這個問題)?CKEditor在拖放上銷燬小部件

回答

8

在拖放過程中,部件被摧毀(並重新初始化),這種行爲是無法避免的。

你如何鏈接你的jQuery組件與widget對象?你的小部件定義是什麼樣的? (這是您通過editor.widgets.add()調用傳遞的對象)。你使用Widget.setData() /你如何將這個jQuery組件設置爲窗口小部件數據?

如果您很難回答這些問題,那麼您可以在此處複製粘貼小部件實例的源代碼(打開瀏覽器的開發人員工具並查找具有data-cke-widget-id屬性的元素 - 不要與源模式視圖混淆在CKEditor中)。將其粘貼到整個內容中。

小工具將其數據存儲在data-cke-widget-dataHTML屬性中。一個盲目的猜測是,你要麼不在widget上正確設置數據,要麼在字符串化後再解析,它不能正確處理jQuery對象。也許你可以使用widget.definition.init初始化你的jQuery組件並將數據保存爲一個普通對象(Widget.setData)?

你可能也想看看CKEditor widget documentation瞭解更多信息。

+0

因此,一般來說,我必須使用setData存儲當前狀態,以便在重新創建後可以在小部件拖放時正確恢復它,對嗎? –

+1

是的,'Widget.setData'應該將所有內容都保存在widget的data-cke-widget-data屬性中,即使在銷燬widget之後它也應該可用。 – Comandeer

+0

如果小部件是更復雜的東西(即用戶可以擴展的節點的jquery樹,那麼當我的小部件是DnD時,我必須重新創建整個樹),我該怎麼辦? –