Redactor编辑器destroy方法报错:如何提前检查方法是否存在?
解决Redactor编辑器重复销毁报错的问题
我来帮你搞定这个困扰~首先明确一下:Redactor里你调用的'destroy'这类“method”,本质是编辑器实例上的函数,不是类哦。
要避免重复调用destroy时报错,你可以用以下几种方法提前检查:
直接检查Redactor实例及方法存在性
Redactor初始化后会把实例挂载到目标元素的data属性里,你可以先获取实例再判断方法是否存在:// 获取Redactor实例 const redactorInstance = $('#id').data('redactor'); // 检查实例存在且destroy方法是函数类型 if (redactorInstance && typeof redactorInstance.destroy === 'function') { redactorInstance.destroy(); }用try-catch捕获错误(简单粗暴型)
如果不想写太多判断逻辑,直接用try-catch包裹调用代码,忽略已销毁时的报错:try { $('#id').redactor('destroy'); } catch (error) { // 这里可以加日志提示,或者什么都不做 console.log('编辑器已销毁,无需重复执行销毁操作'); }通过DOM类名间接判断(辅助方案)
Redactor初始化后会给编辑器容器添加特定类名(比如redactor-editor),销毁后会移除,你可以通过这个类名判断编辑器是否还存在:if ($('#id').hasClass('redactor-editor')) { $('#id').redactor('destroy'); }不过这种方法不如直接检查实例靠谱,因为极端情况下可能出现类名残留的问题。
简单解释下报错原因:编辑器销毁后,元素上绑定的Redactor实例会被清除,此时再调用$('#id').redactor('destroy'),Redactor找不到对应的实例方法,就会抛出"No such method 'destroy' for Redactor"的错误啦。
内容的提问来源于stack exchange,提问作者JC Borlagdan
相关产品推荐
相关产品推荐

