CKEditor + Bootstrap模态+ LayoutManager插件,selection.getStartElement()返回null

时间:2016-03-07 17:18:10

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

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

当第一次单击其中一个按钮时,一切正常,我可以获得正确的开始元素,并且可以从我的应用程序正确地评估可编辑区域。 当我处理modal i destroy时,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._editor是别名this.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' );行。

1 个答案:

答案 0 :(得分:1)

我找到了答案:

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

我在initialize的{​​{1}}方法中有这一行,但是这样我才得到对被破坏实例的引用。

Backbone.View内的编辑器实例必须"刷新"每次我想用以下结果做某事:

this._editor