如何在Moodle 4.1.1+中通过JS设置编辑器脏标记以保存修改?
问题
我正在开发一款高级评分插件,在评分页面添加了按钮,通过JS的.setHTML方法修改Atto编辑器内容。但点击保存按钮后,Moodle因未检测到编辑器内容变更,导致修改无法保存。请问能否通过JS为评分页面的编辑器设置脏标记?测试环境为Moodle 4.1.1+。
原测试代码:
var editor = Y.one('#id_assignfeedbackcomments_editor' + 'editable'); editor.setHTML(comment);
补充说明:
- 已在TinyMCE上成功实现设置脏标记,但Atto编辑器上未能实现该功能
- 据Russell England指出,Atto将被移除,计划告知客户Atto已废弃,暂将此问题标记为bug
- 当前使用的代码:
try { tinyMCE.activeEditor.setContent(comment); tinyMCE.activeEditor.setDirty(true); } catch (error) { Y.one('#id_assignfeedbackcomments_editoreditable').setHTML(comment); }
解决方案
TinyMCE编辑器处理
你的现有代码已经正确实现需求:先用tinyMCE.activeEditor.setContent(comment)更新编辑器内容,再调用setDirty(true)手动标记编辑器为"已修改",这样Moodle就能检测到内容变更并正常保存。
Atto编辑器处理
Atto没有像TinyMCE那样直接提供setDirty方法,但可以通过模拟输入事件触发Moodle的变更检测:
var editorElement = Y.one('#id_assignfeedbackcomments_editoreditable'); editorElement.setHTML(comment); // 模拟输入事件,让Moodle识别内容已变更 editorElement.simulate('input');
注意:这种模拟事件的方式可能存在浏览器或Moodle版本兼容性问题。
关于Atto的废弃说明
Atto编辑器已被Moodle官方标记为待移除组件,后续版本会逐步淘汰并切换到TinyMCE。告知客户优先使用TinyMCE是更合理的方案,将Atto下的此问题标记为bug是合适的处理方式。
内容的提问来源于stack exchange,提问作者BoldAdventurer
相关产品推荐
相关产品推荐

