Jedes Mal, wenn Sie ein Theme oder eine Komponente erstellen oder installieren, weist Discourse dieser eine ID zu. Wenn Sie die Seite dieser Komponente besuchen, sollten Sie diese ID in der URL sehen (die Zahl am Ende).
![]()
Wenn diese Komponente zu Ihrem Theme hinzugefügt wird, scheint ihre Ausführungsreihenfolge – auf sehr einfacher Ebene (ohne Verzögerung, z. B. durch ein einfaches console.log) – von ihrer ID abhängig zu sein. Das bedeutet: 233 wird vor 234 ausgeführt und so weiter.
Das funktioniert in den meisten Fällen, da nachfolgende Änderungen üblicherweise in neuen Komponenten vorgenommen werden, sodass alles einfach funktioniert.
Langfristig könnte die Reihenfolge der Liste der Komponenten entsprechen, die Sie zu Ihrem Theme hinzugefügt haben.
Dies steht jedoch derzeit nicht auf der Roadmap.
Was Sie wirklich benötigen, ist die Reihenfolge der Initialisierer. Ich glaube nicht, dass dies möglich ist, es sei denn, Sie verlagern Ihren Code in die neue Methode zur Erstellung von Theme-JS. Diese Methode ermöglicht es Ihnen, einem Initialisierer einen Namen und eine Ausführungsreihenfolge zuzuweisen. Nehmen wir beispielsweise an, ich habe folgende Datei:
/javascripts/discourse/initializers/initialize-for-foo.js
und sie sieht so aus:
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("foo")
});
}
}
Und ich habe einen weiteren Initialisierer, der so aussieht:
/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")
});
}
}
Wenn ich sicherstellen möchte, dass bar nach foo ausgeführt wird, kann ich ein after:-Argument hinzufügen. Dadurch wird gewährleistet, dass der Initialisierer nach dem angegebenen Namen ausgeführt wird. Um also bar nach foo auszuführen, würde ich in
/javascripts/discourse/initializers/initialize-for-bar.js
folgendes tun:
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
+ after: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar");
});
}
};
