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

时间:2017-02-24 15:45:50

标签: ckeditor

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

CKEditor在第一次访问时在SPA页面中正常运行,但在下次访问时则不行。例如,当按向后浏览器箭头(显示上一个SPA页面)然后按向前箭头(再次显示带有CKEditor的SPA页面)时,会出现CKEditor,但内容已被删除,并且它不再响应。在文本区域碰到时没有carret。此外,所有API调用(例如setData()或resize())都不再有效(而他们正在进行第一次访问)。

我认为CKEditor不喜欢从DOM中删除它的元素(这是切换到另一个页面时发生的情况),然后重新添加到DOM(这是再次访问页面时会发生的情况)。

2017年7月5日编辑

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

理想情况下,我希望用户可以在编辑器中编写内容时访问另一个页面(例如检查信息或从另一个页面复制内容)然后继续当他导航回编辑时,他在哪里(滚动条,插入符号,选择等没有变化)。

有可能吗?

1 个答案:

答案 0 :(得分:0)

删除CKEditor只是删除它的父容器,就像在你的小提琴中一样,这不是一个好的解决方案,因为CKEditor会将一些侦听器附加到DOM,并且通过删除容器,你将分离那些未重新连接的侦听器。

在从DOM中删除之前,您应该destroy编辑器,然后重新创建它。请记住,销毁以异步方式发生,以便知道何时完成,您可以听destroy event

使用destroy方法修改fiddle(不处理应添加的destroy事件)。

2017年7月10日编辑

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

  

理想情况下,我希望用户可以在编辑器中编写内容时访问另一个页面

由于您正在创建SPA应用程序,对于上述更好的解决方案将是使用放置CKEditor的一些浮动/固定容器,并且在导航时不会重新加载页面的其余部分(例如,与Facebook聊天相同)作品)。

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