You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:10:02