首页 文章

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

提问于
浏览
0

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

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

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

EDIT ON July 5 2017

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

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

有可能吗?

1 回答

  • 0

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

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

    这里使用 destroy 方法修改fiddle(不处理应该添加的 destroy 事件) .

    EDIT ON July 10 2017

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

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

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

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

相关问题