Comment modifier la classe de route Ember

Bonjour à tous,

Je souhaite modifier la classe Ember Route (/app/assets/javascripts/discourse/routes/tags-show.js.es6) de la même manière que nous modifions les classes Controller et Component en utilisant pluginAPI.

Voici un exemple de modification du contrôleur composer.js.es6 :

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

Est-il possible de modifier la classe Ember Route de la même manière ?

Je pense que c’est possible — je crois que cela fonctionne via route:nom-de-route. Avez-vous essayé ?

route:route-name fonctionne, mais lorsque j’essaie de remplacer l’action createTopic comme ci-dessous :

<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(() => {
            // Pré-remplir le champ de saisie des tags
            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>   

Une erreur est levée :
ReferenceError : Composer n'est pas défini

Cela se produit parce que Composer n’est pas défini dans votre code. Si vous consultez la route tags-show, vous verrez que Composer est défini tout en haut.

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

Cependant, comme vous effectuez cette opération dans des balises de script de thème, vous ne pouvez pas utiliser import. Vous devrez utiliser require à la place.

Ainsi, cela devrait fonctionner si vous ajoutez quelque chose comme ceci au début de votre code :

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

Cela dit, je vous recommande vivement de prendre un peu de temps pour lire

et d’expérimenter cette nouvelle façon de créer des thèmes. Il est beaucoup plus facile de suivre les exemples du noyau de cette manière.