Ogni volta che crei o installi un tema o un componente, Discourse gli assegna un ID. Se visiti la pagina di quel componente, dovresti vedere quell’ID nell’URL (il numero alla fine).
![]()
Quando quel componente viene aggiunto al tuo tema, il suo ordine di esecuzione sembra basarsi sul suo ID, a un livello molto basilare (facendo un console.log senza alcun deferimento). Quindi, il 233 verrà eseguito prima del 234 e così via.
Questo funziona per la maggior parte dei casi perché le modifiche successive vengono solitamente aggiunte in nuovi componenti, quindi funziona semplicemente.
A lungo termine, potremmo far sì che l’ordine rispetti quello dell’elenco dei componenti che hai aggiunto al tema.
ma al momento non è previsto in nessuna roadmap.
Ciò di cui hai realmente bisogno è l’ordine degli inizializzatori. Non credo che tu possa farlo a meno che non sposti il tuo codice nel nuovo modo di creare il JavaScript del tema. Questo metodo ti consente di assegnare un nome e un ordine di esecuzione all’inizializzatore. Ad esempio, supponiamo di avere questo file
/javascripts/discourse/initializers/initialize-for-foo.js
e che appaia così:
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("foo")
});
}
}
e che abbia un altro inizializzatore che appare così:
/javascripts/discourse/initializers/initialize-for-bar.js
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar")
});
}
}
Se voglio assicurarmi che bar venga eseguito dopo foo, posso aggiungere un argomento after: ad esso, il che garantirà che venga eseguito dopo il nome dell’inizializzatore che passo lì. Quindi, per far sì che bar venga eseguito dopo foo, farei questo in
/javascripts/discourse/initializers/initialize-for-bar.js
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
+ after: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar");
});
}
};
