我们使用 API 修改了帖子编辑器控制器,并为其添加了错误处理。我手头没有最新版本的代码,但大致如下:
var computed = require("ember-addons/ember-computed-decorators").default;
api.modifyClass('controller:composer',
{
save(opts) {
var categoryNb = $('.category-input .category-chooser .selected-name > span').length;
if((categoryNb !== 0 && categoryNb < 2) ) {
this.set("lastValidatedAt", Date.now());
return false;
}
return this._super(opts);
},
@computed("model.categoryId", "lastValidatedAt")
categoryValidation(categoryId, lastValidatedAt) {
var InputValidation = require("discourse/models/input-validation").default;
var categoryNb = $('.category-input .category-chooser .selected-name > span').length;
if( (categoryNb !== 0 && categoryNb < 2) ) {
return InputValidation.create({
failed: true,
reason: 'You need to select a subcategory',
lastShownAt: lastValidatedAt
});
} else {
return this._super(categoryId, lastValidatedAt);
}
}
}
);
简而言之,这段代码只是检查分类输入中的元素数量,如果数量为一或零,则输出错误。子分类始终包含两个元素:‘<PARENT><CHILD>’。在我手头的这个代码片段版本中,这是通过 jQuery 实现的。我相信还有一个 API 调用用于获取分类的层级深度。