So ändern Sie die Ember Route-Klasse

Hallo zusammen,
ich möchte die Ember-Route-Klasse (/app/assets/javascripts/discourse/routes/tags-show.js.es6) auf dieselbe Weise modifizieren, wie wir Controller- und Component-Klassen über pluginAPI ändern.
Ein Beispiel, wie wir den Composer-Controller in composer.js.es6 ändern:

<script type="text/discourse-plugin" version="0.8">
  api.modifyClass('controller:composer', {
    actions: {
        newActionHere() { }
   }
});
</script>

Ist es möglich, die Ember-Route-Klasse auf dieselbe Weise zu ändern?

Ich glaube, das ist möglich – ich denke, es funktioniert über route:route-name. Hast du es schon ausprobiert?

route:route-name funktioniert, aber wenn ich versuche, die Aktion createTopic wie unten gezeigt zu überschreiben:

<script type="text/discourse-plugin" version="0.8">
  api.modifyClass('route:tags-show', {
    actions: {
     createTopic() {
      const controller = this.controllerFor("tags.show");

      if (controller.get("list.draft")) {
        this.openTopicDraft(controller.get("list"));
      } else {
        this.controllerFor("composer")
          .open({
            categoryId: controller.get("category.id"),
            action: Composer.CREATE_TOPIC,
            draftKey: controller.get("list.draft_key"),
            draftSequence: controller.get("list.draft_sequence")
          })
          .then(() => {
            // Tags-Eingabefeld vorfüllen
            if (controller.get("model.id")) {
              const composerModel = this.controllerFor("composer").get("model");

              composerModel.set(
                "tags",
                _.compact(
                  _.flatten([
                    controller.get("model.id"),
                    controller.get("additionalTags")
                  ])
                )
              );
            }
          });
      }
    }
}
 });
</script>   

Dabei wird der folgende Fehler ausgelöst:
ReferenceError: Composer ist nicht definiert

Dies liegt daran, dass Composer in deinem Code nicht definiert ist. Wenn du dir die Route tags-show ansiehst, wirst du feststellen, dass Composer oben definiert ist.

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/routes/tags-show.js.es6#L2

Da du dies jedoch in Skript-Tags eines Themes ausführst, kannst du import nicht verwenden. Stattdessen musst du require verwenden.

Es sollte also funktionieren, wenn du etwas wie Folgendes an den Anfang deines Codes fügst:

const Composer = require("discourse/models/composer");

Trotzdem empfehle ich dir dringend, dir etwas Zeit zu nehmen, um

zu lesen und mit dieser neuen Methode zur Erstellung von Themes zu experimentieren. Auf diese Weise lassen sich Beispiele aus dem Kern viel leichter nachvollziehen.