导航回编辑器页面时,CKEditor(在SPA中)冻结

导航回编辑器页面时,CKEditor(在SPA中)冻结,ckeditor,Ckeditor,我正在尝试将CKEditor集成到SPA(单页应用程序)的一个页面中 在第一次访问时,CKEditor在SPA页面中的行为正确,但在下次访问时则不正确。例如,当按下向后浏览器箭头(显示上一个SPA页面)和向前箭头(使用CKEditor再次显示SPA页面)时,会出现CKEditor,但内容已被删除,不再起作用。在文本区域进行点击时没有卡雷特。此外,所有API调用(如setData()或resize())都不再有效(而它们是在首次访问时进行的) 我假定CKEditor不喜欢将其元素从DOM中删除(切

我正在尝试将CKEditor集成到SPA(单页应用程序)的一个页面中

在第一次访问时,CKEditor在SPA页面中的行为正确,但在下次访问时则不正确。例如,当按下向后浏览器箭头(显示上一个SPA页面)和向前箭头(使用CKEditor再次显示SPA页面)时,会出现CKEditor,但内容已被删除,不再起作用。在文本区域进行点击时没有卡雷特。此外,所有API调用(如setData()或resize())都不再有效(而它们是在首次访问时进行的)

我假定CKEditor不喜欢将其元素从DOM中删除(切换到另一个页面时会发生这种情况),然后重新添加到DOM中(再次访问页面时会发生这种情况)

于2017年7月5日编辑

感谢您提出在离开页面时销毁CKEditor,并在返回时重新创建它,但这会导致编辑器状态丢失,例如滚动条位置、插入符号位置、文本选择等

理想情况下,我想让用户访问另一个页面时,他正在编写编辑器中的某个东西(例如,检查信息或从另一个页面复制内容),然后在他返回编辑器时准确地继续他所在的位置(滚动条、插入符号、选择……没有变化)。
是可能的吗?

仅通过移除其父容器(如在您的小提琴中)来移除CKEditor不是一个好的解决方案,因为CKEditor将一些侦听器附加到DOM,而通过移除容器,您正在分离那些未重新附加的侦听器

在从DOM中删除编辑器之前,应该先创建它,然后再重新创建它。请记住,销毁是以异步方式进行的,这样您就可以知道销毁何时完成

此处使用
destroy
方法进行修改(不处理应添加的
destroy
事件)

于2017年7月10日编辑

要在销毁-重新创建之间保留编辑器的状态(滚动条位置、文本选择等),应在销毁编辑器之前保留所有这些元素的状态,然后在重新创建编辑器之后进行设置。这是可行的,但需要一些工作和相当多的自定义代码

理想情况下,我想让用户在他在编辑器

写文章的时候访问另一个页面。 由于您正在创建SPA应用程序,因此,对于上述情况,更好的解决方案是使用一些浮动/固定容器,其中放置了CKEditor,并且在导航时不会与页面的其余部分一起重新加载(例如,与Facebook chat works相同)


还要记住,重新创建CKEditor需要一些时间(非常短,但可能仍然可见)因此,在每个页面导航中,用户都可以看到编辑器发生了一些事情,即使它的状态没有改变。

我这样做是为了帮助重现问题,可能是重复的感谢Marek,但如果可能的话,我正在寻找更好的解决方案(见我7月5日的编辑)@布鲁诺请看我的编辑。谢谢,但如果可能的话,我正在寻找更好的解决方案(请看我7月5日的编辑)