我在自己的实例中使用了一个简单的主题组件来实现这个功能。下面是我的一个改编版本——除了 #reply 之外,它还支持 #upload(在桌面端打开上传窗口的新回复)和 #edit(用于 Wiki 的原始发帖)。
它还需要一些改进,比如避免使用 setTimeout,并正确管理 draftSequence(我认为 topic.draft_sequence 可能不正确),我也不确定这里的最佳实践是什么。不过,目前对我来说运行正常。
访问任何主题,例如 /t/[slug]/[id]#reply,将打开编辑器并创建一个新的空回复。
如果你需要预填文本,可以通过传递给 composer.open 的对象设置 reply 属性来实现。此外,如果该主题已有草稿,系统会在创建新回复之前询问你是否要保存或丢弃该草稿——如果希望恢复该草稿,draftSequence 必须正确。
<script type="text/discourse-plugin" version="0.4">
if (/.*#reply$/g.test(document.URL)) {
const { REPLY } = require('discourse/models/composer').default;
const composer = Discourse.__container__.lookup('controller:composer');
setTimeout(function() {
const topic = Discourse.__container__.lookup("controller:topic").get("model");
if (topic) {
composer.open({
action: REPLY,
draftKey: topic.draft_key,
draftSequence: topic.draft_sequence,
topic,
});
}
}, 0)
}
</script>
希望这能帮到你。