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?
justin
(Justin DiRose)
9 Marzo, 2020 13:27
2
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
Johani
(Joe)
10 Marzo, 2020 22:12
4
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
Complex theme javascript can be split into multiple files, to keep things nicely organised.
To use this functionality, simply add files to the /javascripts folder in your theme directory. These files can not be edited from the Discourse UI, so you must use the Theme CLI or source the theme from git .
Javascript files are treated exactly the same as they are in core/plugins, so you should follow the same file/folder structure. Theme files are loaded after core/plugins, so if the filenames match,…
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