saurabhmasc
(Saurabh Khandelwal)
9 Marzo 2020, 11:06am
1
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?
justin
(Justin DiRose)
9 Marzo 2020, 1:27pm
2
Credo che sia possibile — penso che funzioni tramite route:route-name. L’hai già provato?
saurabhmasc
(Saurabh Khandelwal)
9 Marzo 2020, 2:16pm
3
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
Johani
(Joe)
10 Marzo 2020, 10:12pm
4
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
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 a sperimentare questo nuovo modo di creare i temi. È molto più facile seguire gli esempi nel core in questo modo.