Cada vez que creas o instalas un tema o un componente, Discourse le asigna un ID. Si visitas la página de ese componente, deberías ver ese ID en la URL (el número al final).
![]()
Cuando ese componente se añade a tu tema, su orden de ejecución parece basarse en su ID, a un nivel muy básico (haciendo un console.log sin ningún aplazamiento). Así, el 233 se ejecutará antes que el 234, y así sucesivamente.
Esto funciona en la mayoría de los casos porque los cambios posteriores suelen añadirse en nuevos componentes, por lo que simplemente funciona.
A largo plazo, el orden podría respetar el de la lista de componentes que has añadido al tema.
pero eso no está en ninguna hoja de ruta por ahora.
Lo que realmente necesitas es el orden de los inicializadores. No creo que puedas hacerlo a menos que muevas tu código a la nueva forma de crear JavaScript para temas. Este método te permite asignar un nombre y un orden de ejecución al inicializador. Por ejemplo, supongamos que tengo este archivo:
/javascripts/discourse/initializers/initialize-for-foo.js
y se ve así:
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("foo")
});
}
}
y tengo otro inicializador que se ve así:
/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")
});
}
}
Si quiero asegurarme de que bar se ejecute después de foo, puedo añadir un argumento after: a él, lo que garantizará que se ejecute después del nombre del inicializador que pase allí. Así, para hacer que bar se ejecute después de foo, haría lo siguiente en:
/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");
});
}
};
