saurabhmasc
(Saurabh Khandelwal)
Março 9, 2020, 11:06am
1
Olá a todos,
Gostaria de modificar a classe Ember Route (/app/assets/javascripts/discourse/routes/tags-show.js.es6) da mesma forma que modificamos as classes Controller e Component usando pluginAPI.
Um exemplo de como modificamos o controller composer.js.es6 está abaixo:
<script type="text/discourse-plugin" version="0.8">
api.modifyClass('controller:composer', {
actions: {
newActionHere() { }
}
});
</script>
É possível modificar a classe Ember Route da mesma maneira?
justin
(Justin DiRose)
Março 9, 2020, 1:27pm
2
Acredito que isso seja possível — acho que funciona via route:route-name. Você já tentou?
saurabhmasc
(Saurabh Khandelwal)
Março 9, 2020, 2:16pm
3
route:route-name funciona, mas quando tento sobrescrever a ação createTopic como mostrado abaixo:
<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(() => {
// Preencher o campo de entrada de 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>
Ele lança o erro:
ReferenceError: Composer is not defined
Johani
(Joe)
Março 10, 2020, 10:12pm
4
Isso ocorre porque Composer não está definido no seu código. Se você observar a rota tags-show, verá que Composer é definido no início.
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/routes/tags-show.js.es6#L2
No entanto, como você está fazendo isso em tags de script de tema, não pode usar import. Você terá que usar require em vez disso.
Portanto, deve funcionar se você adicionar algo assim no início do seu código:
const Composer = require("discourse/models/composer");
Dito isso, recomendo fortemente que você dedique um tempo para ler
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,…
e experimentar essa nova maneira de criar temas. Dessa forma, é muito mais fácil seguir exemplos do núcleo.