【问题标题】:CKEditor + Bootstrap modal + LayoutManager plugin, selection.getStartElement() returns nullCKEditor + Bootstrap modal + LayoutManager 插件,selection.getStartElement() 返回null
【发布时间】:2016-03-08 17:24:29
【问题描述】:

单击我的应用程序的一堆按钮可以创建不同的自定义 CKEditor 实例,此外,在 textarerea 内部创建了一个带有 layoutmanager 插件的网格。创建的编辑器位于引导模式的主体内。

当第一次单击其中一个按钮时,一切正常,我可以获得正确的开始元素,并且可以从我的应用程序中正确访问可编辑区域。 当我处理模态时,我还会销毁 CKEditor 的实例,并删除关联的视图(该应用程序还涉及 Backbone.js):

$('#tallModal').one('hidden.bs.modal', function(e) {
                if (this.ckeditor) {
                    CKEDITOR.instances[this.model.get("uniqueId")].destroy();
                    this.ckeditor = null;
                    }
                this.view.close();
            }.bind(this)).modal('hide');

this.ckeditor 创建如下:

this.ckeditor = $("#"+ this.model.get("uniqueId")).ckeditor(config.rte.ckeditor, $deferred.resolve).editor;

当我点击另一个按钮时,模式会显示正确的编辑器实例,但是当我的代码中的这一行到达时(this._editorthis.ckeditor 的别名):

return this._editor.getSelection().getStartElement();

出现以下错误:

TypeError: Cannot read property 'getStartElement' of null

调试代码我发现当编辑器被销毁然后再次创建时,编辑器对象(this._editor)具有属性status="destroyed",而当一切正常时status="ready"

我尝试了这个解决方案CKEditor issue with Bootstrap modal 和许多其他没有运气的解决方案,无论如何都会调用this.$element.trigger( 'focus' ); 行。

【问题讨论】:

    标签: javascript jquery twitter-bootstrap backbone.js ckeditor


    【解决方案1】:

    我找到了自己的答案:

    this._editor = CKEDITOR.instances[this.model.get("uniqueId")];
    

    我在Backbone.Viewinitialize 方法中有这一行,但这样我只能得到对被破坏实例的引用。

    this._editor 中的编辑器实例必须在每次我想要对结果执行某项操作时“刷新”:

     return this._editor.getSelection().getStartElement();
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多