Come modificare la classe di route di Ember

Ciao a tutti,
Voglio modificare la classe Ember Route (/app/assets/javascripts/discourse/routes/tags-show.js.es6) nello stesso modo in cui modifichiamo le classi Controller e Component utilizzando pluginAPI.
Un esempio di come modifichiamo il controller composer.js.es6 è il seguente:

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

È possibile modificare la classe Ember Route nello stesso modo?

Credo che sia possibile — penso che funzioni tramite route:route-name. L’hai già provato?

route:route-name funziona, ma quando provo a sovrascrivere l’azione createTopic come mostrato di seguito:

<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(() => {
            // Pre-compila il campo di input dei tag
            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>   

Viene generato l’errore:
ReferenceError: Composer non è definito

Questo accade perché Composer non è definito nel tuo codice. Se guardi la rotta tags-show, vedrai che Composer è definito all’inizio.

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

Tuttavia, dato che stai facendo questo nei tag script del tema, non puoi usare import. Dovrai usare require invece.

Quindi, dovrebbe funzionare se aggiungi qualcosa del genere all’inizio del tuo codice

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

Detto questo, ti consiglio vivamente di dedicare un po’ di tempo alla lettura di

e a sperimentare questo nuovo modo di creare i temi. È molto più facile seguire gli esempi nel core in questo modo.