ueditor二次加载(getEditor)渲染失败(加载失败)的原因解决方案


【来源】:php高级视频自学论坛


ueditor二次加载(getEditor)渲染失败(加载失败)的原因解决方案


大家自己看看官方的js文件ueditor.all.js有以下的代码


/**
     * @name getEditor
     * @since 1.2.4+
     * @grammar UE.getEditor(id,[opt])  =>  Editor实例
     * @desc 提供一个全局的方法得到编辑器实例
     *
     * * ''id''  放置编辑器的容器id, 如果容器下的编辑器已经存在,就直接返回
     * * ''opt'' 编辑器的可选参数
     * @example
     *  UE.getEditor('containerId',{onready:function(){//创建一个编辑器实例
     *      this.setContent('hello')
     *  }});
     *  UE.getEditor('containerId'); //返回刚创建的实例
     *
     */
    UE.getEditor = function (id, opt) {
        var editor = instances[id];
        if (!editor) {
            editor = instances[id] = new UE.ui.Editor(opt);
            editor.render(id);
        }
        return editor;
    };


    UE.delEditor = function (id) {
        var editor;
        if (editor = instances[id]) {
            editor.key && editor.destroy();
            delete instances[id]
        }
    };


这段可以看到,在调用UE.getEditor(‘_editor’)初始化UEditor时,先从放置编辑器的容器instances中获取,没有实例才实例化一个Editor,这就是引起问题的原因。 
在第一次跳转到编辑器界面时,正常的实例化了一个新的编辑器对象,并放入instances,调用editor.render(id)渲染编辑器的DOM; 
第二次初始化时却仅从容器中取到实例:var editor = instances[id]; 直接返回了editor对象,而编辑器的DOM并没有渲染。

【解决方案】:
再次使用时先删除之前的实例化对象,再进行再次实例化


UE.delEditor('editor');   //先删除之前实例的对象
UE.getEditor('editor');    //添加编辑器


或者如下解决,对目标DOM进行手动渲染


UE.getEditor('editor').render('editor');   //使用之前的对象(同时渲染DOM)





你可能感兴趣的:(web编辑器)