Wir haben die API verwendet, um den Post-Composer-Controller zu modifizieren und einen Fehler hinzuzufügen. Ich habe die neueste Version des Codes nicht zur Hand, aber es sah ungefähr so aus:
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: 'Sie müssen eine Unterkategorie auswählen',
lastShownAt: lastValidatedAt
});
} else {
return this._super(categoryId, lastValidatedAt);
}
}
}
);
Kurz gesagt, sucht dies einfach nach der Anzahl der Elemente in der Kategorie-Eingabe und gibt einen Fehler aus, wenn es nur eines oder keines gibt. Eine Unterkategorie hat immer zwei Elemente ‘’. In dieser Version des Snippets, die ich noch herumliegen hatte, wurde dies über jQuery umgesetzt. Ich glaube, es gab einen weiteren API-Aufruf, um die Tiefe einer Kategorie zu ermitteln.