Wie erhalte ich Kategorieinformationen von Composer?

Ist es möglich, Code (aus einer Theme-Komponente) auszuführen, wenn im Composer eine Kategorie ausgewählt wird? Ich möchte sowohl beim Öffnen des Composers als auch bei einer Änderung im Kategorien-Dropdown herausfinden, welche Kategorie ausgewählt ist.

Ich habe darüber nachgedacht, dass dies vielleicht durch die Änderung eines Controllers oder einer Komponente, wie dem Composer-Controller, möglich sein könnte. Aber ich konnte die Kategorie-Informationen nicht finden.

2 „Gefällt mir“

Sie können model.categoryId im Composer-Controller beobachten und Ihren Code ausführen, wenn die Änderung eintritt.

5 „Gefällt mir“

Danke @fzngagan!

Eine Nachfolgefrage, so etwas habe ich bei einem Modell noch nie beobachtet :slight_smile:. Ich habe folgenden Ansatz ausgearbeitet, der offenbar funktioniert.

const { observes } = require('discourse-common/utils/decorators');
api.modifyClass("controller:composer", {
    @observes('model.categoryId')
    getCategory() {
        let categoryId = this.get("model.categoryId");
        if (categoryId == null) return;
        
        let category = this.site.categories.findBy("id", categoryId).name;
    }
});

Ist das der richtige (oder bevorzugte) Weg, dies zu tun? Und ist das der beste Weg, den Kategoriewert aus der ID zu erhalten?

1 „Gefällt mir“

Du kannst prüfen, was das model-Objekt enthält. Es könnte bereits den Kategorienamen enthalten.

1 „Gefällt mir“

Meinst du mit ‘model object’, dass ich so etwas machen soll?

this.get("model")

Edit:
Wie auch immer, der Code funktioniert großartig. Nochmals vielen Dank!

1 „Gefällt mir“