Cómo modificar la clase de ruta de Ember

Hola a todos,
Quiero modificar la clase Ember Route (/app/assets/javascripts/discourse/routes/tags-show.js.es6) de la misma manera que modificamos las clases Controller y Component usando pluginAPI.
Un ejemplo de cómo modificamos el controlador composer.js.es6 es el siguiente:

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

¿Es posible modificar la clase Ember Route de la misma manera?

Creo que esto es posible — creo que funciona mediante route:nombre-de-ruta. ¿Lo has probado?

route:route-name funciona, pero cuando intento sobrescribir la acción createTopic como se muestra a continuación:

<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(() => {
            // Rellenar previamente el campo de entrada de etiquetas
            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>   

Lanza el siguiente error:
ReferenceError: Composer is not defined

Esto ocurre porque Composer no está definido en tu código. Si revisas la ruta tags-show, verás que Composer se define al principio.

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

Sin embargo, como estás haciendo esto en etiquetas de script de temas, no puedes usar import. En su lugar, tendrás que usar require.

Por lo tanto, debería funcionar si agregas algo como esto al principio de tu código:

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

Dicho esto, recomiendo encarecidamente que dediques un poco de tiempo a leer

y a experimentar con esta nueva forma de crear temas. De esta manera, es mucho más fácil seguir los ejemplos del núcleo.

5 Me gusta