关于tinyMCE.get()无setContent/triggerSave方法及初始化异步问题咨询
关于TinyMCE编辑器实例访问问题的解答
问题1:初始化后异步获取实例缺失方法的原因及解决方案
TinyMCE的init()方法本身是异步执行的——即便你在jQuery.ready()里调用它,编辑器的DOM渲染、实例化过程也是后台完成的,不会阻塞后续代码执行。
你之前的项目没碰到问题,大概率是巧合:要么当时页面资源加载速度快,编辑器实例化完成的时间早于AJAX请求返回并执行初始化表单的时间;要么之前的AJAX请求本身耗时较长,变相给了编辑器足够的初始化时间。
用setTimeout是临时 workaround,更可靠的做法是利用TinyMCE自带的初始化完成事件来触发后续逻辑:
- 在
init配置里通过setup钩子监听编辑器的init事件:tinymce.init({ selector: '#message_content', setup: function(editor) { editor.on('init', function() { // 编辑器初始化完成后,再执行AJAX获取数据并设置内容的逻辑 loadFormData(); }); } // 其他配置项 }); - 如果AJAX请求是独立触发的(比如用户点击按钮加载),可以先检查编辑器是否就绪:
function loadFormData() { const editor = tinymce.get('message_content'); if (editor && editor.initialized) { editor.setContent(yourAjaxData); } else { // 等待编辑器初始化完成后重试 setTimeout(loadFormData, 50); } }
问题2:实例无triggerSave方法的原因
triggerSave()是TinyMCE全局对象的方法,作用是遍历页面上所有编辑器实例,调用每个实例的save()方法,将编辑器内容同步到对应的textarea。单个编辑器实例并没有triggerSave()方法,你需要调用实例的save()方法来同步当前编辑器的内容:
const editor = tinymce.get('message_content'); if (editor) { editor.save(); // 替代triggerSave,仅同步当前编辑器 }
你之前用全局tinyMCE.triggerSave()能生效,是因为页面只有一个编辑器,全局方法会自动找到它并执行save()。
内容的提问来源于stack exchange,提问作者Ivor Durham
相关产品推荐
相关产品推荐

