使用CKEDITOR的Widget API时使用CKEDITOR.dom.node.remove()+ downcast时出错

时间:2015-04-13 20:52:16

标签: ckeditor

我在Widget插件的plugin.js第2509行获得Uncaught TypeError: Cannot read property 'attributes' of null

之前我们没有任何错误,但之后将我们的插件转换为Widget,并且遇到了一些问题,这些问题会导致我们的CMS(Drupal + WYSIWYG插件)无法保存更新的内容。

我们创建了一个使用CKEDITOR.dom.node.remove()的contextMenu项“delete”,当我们这样做时,它会在向下转发时抛出错误。使用剪贴板插件的键盘'cut'命令不会在向下转换时抛出错误。

从编辑器中销毁,删除或删除Widget的正确方法是什么?

我已经尝试了http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-destroy,但它无法使用。此外,它不是我试图强制内联的块级元素(http://ckeditor.com/forums/Support/inline-widget-error-on-downcast)。

这里失败了,使用了element.getFirst()然后错误发生在if ( widgetElement.attributes...上:

if ( 'data-cke-widget-id' in attrs ) {
                    widget = widgetsRepo.instances[ attrs[ 'data-cke-widget-id' ] ];
                    if ( widget ) {
                        widgetElement = element.getFirst( isParserWidgetElement );
                        toBeDowncasted.push( {
                            wrapper: element,
                            element: widgetElement,
                            widget: widget,
                            editables: {}
                        } );

                        // If widget did not have data-cke-widget attribute before upcasting remove it.
                        if ( widgetElement.attributes[ 'data-cke-widget-keep-attr' ] != '1' )
                            delete widgetElement.attributes[ 'data-widget' ];
                    }
                }

1 个答案:

答案 0 :(得分:0)

这是我的开发人员错误。我没有删除()小部件的父包装器。如果在remove()上出现此错误,请确保检查DOM并确保删除了widget包装器。如果它仍在那里你做错了,需要更好地定位你的remove()。