Plugin-Entwicklung – Besserer Weg, Daten für ein Modell abzurufen und Widget neu zu rendern?

Hallo zusammen!

Ich entwickle gerade ein Plugin, das versucht, Seiten, die als Wikilinks verlinkt sind, als verknüpfte Referenzen zu laden.

Ich habe eine grundlegende Implementierung, die funktioniert, aber das aktuelle Design gefällt mir nicht und ich wollte sehen, ob es APIs gibt, die ich übersehe und die mir helfen würden, dies reibungsloser zu gestalten.

Hier ist mein aktueller Ansatz: discourse-wikilinks/assets/javascripts/initializers/wikilinks-init.js at main · dvargas92495/discourse-wikilinks · GitHub

Tl;dr:

  • Verwende api.reopenWidget für das post-links-Widget, um die html-Methode zu überschreiben.
  • Beim ersten Rendern des Widgets, rufe den Topic-Titel ab und suche dann nach Topics, die [[Titel]] in ihrem Titel haben.
  • Nach dem Abrufen, plane ein erneutes Rendern mit den Antwortdaten, wobei ein Flag verwendet wird, um sicherzustellen, dass wir beim nächsten Rendern nicht unendlich oft abrufen.

Dieser Ansatz ist suboptimal, weil:

  • Es gibt eine Verzögerung zwischen dem anfänglichen Rendern und dem Rendern der restlichen Daten.
  • Das Flag, das unendliches Abrufen verhindert, scheint anfällig für Fehler in der Zukunft zu sein.
  • Ich muss API-Aufrufe tätigen, einen zum Abrufen des Topic-Titels (der höher im Widget-Baum verfügbar sein sollte) und dann einen für die Links.
  • Ich muss die ursprüngliche html-Widget-Methode in den Code meines Plugins kopieren und einfügen, was sie anfällig für Forks macht.

Irgendwelche Gedanken, wie diese Probleme gemildert werden können? Idealerweise würde ich den ursprünglichen loadTopicView-Aufruf bearbeiten, um die Wikilinks einzuschließen.

Bietet Discourse oder jemand aus der Community Beratungsgespräche an? Ich würde gerne für ein Gespräch mit einem Experten bezahlen, der mir einen tiefen Einblick in die Architektur von Discourse und die verfügbaren Plugins gibt. Ich habe bereits die meisten Entwicklungsdokumente durchgearbeitet und bin ein gutes Stück durch den Code gesprungen.