Als Teil unseres Projekts zur Aktualisierung von Discourse auf die neueste Version von Ember haben wir an einer erheblichen Umstrukturierung der Discovery-Routen (auch bekannt als „Themenliste“) gearbeitet.
Dieses Thema richtet sich an Theme-/Plugin-Entwickler und zielt darauf ab, die Arten von Theme-/Plugin-Aktivitäten aufzulisten, die von der Umstrukturierung betroffen sein könnten.
Hintergrund
Diese Umstrukturierung ist notwendig, da modernes Ember keine „benannten Outlets“ wie {{outlet \"topics\"}} mehr unterstützt, die wir auf diesen Routen ausgiebig verwendet haben. Im Wesentlichen wurden alle Controller/Vorlagen, die zuvor in benannte Outlets gerendert wurden, in Komponenten umgewandelt.
Unterwegs haben wir die Gelegenheit genutzt, den relevanten Code zu modernisieren und zu konsolidieren (z. B. teilen jetzt alle Arten von Discovery-Routen denselben Controller und dieselbe Vorlage).
Die Implementierung der Änderung im Kern ist noch nicht abgeschlossen, aber eine Arbeit in progress finden Sie in diesem Branch. Wir haben kein genaues Datum für das Mergen, erwarten es aber innerhalb der nächsten Wochen. Wenn Sie Fragen oder Bedenken haben, lassen Sie es uns bitte wissen!
Welche Theme-/Plugin-Aktivitäten sind betroffen?
Diese Umstrukturierung betrifft hauptsächlich die „Controller“-Schicht. Routen sind weitgehend unverändert, und alles von der <TopicList />-Komponente abwärts ist ebenfalls unberührt.
Wir erwarten, dass die einzigen Auswirkungen auf Themes/Plugins bestehen, die tief in den Kerncode eingreifen (z. B. über modifyClass und Vorlagenüberschreibungen). Definierte APIs und Outlets sind unberührt.
Vorlagenüberschreibungen
Diese Vorlagen wurden in Komponenten umstrukturiert. Alle vorhandenen Überschreibungen funktionieren stillschweigend nicht mehr.
navigation/categoriesnavigation/categorynavigation/defaultnavigation/filterdiscovery/topics
Diese Vorlagen wurden stark umstrukturiert. Alle vorhandenen Vorlagenüberschreibungen können wahrscheinlich katastrophale Fehler auf der Website verursachen.
discoverytag/showuser-topics-listuser/messagesdiscovery/categoriescomponents/basic-topic-listcomponents/d-navigation
Technisch ist es möglich, die neuen Vorlagen zu überschreiben, die durch diese Änderung eingeführt wurden. Vorlagenüberschreibungen werden jedoch nicht empfohlen und sind auf dem Rückzug.
Daher sollten alle Vorlagenüberschreibungen entfernt und durch robustere Erweiterungs-APIs (z. B. Plugin-Outlets) ersetzt werden. Wenn Sie etwas tun, das mit den vorhandenen Erweiterungspunkten von Discourse nicht möglich zu sein scheint, lassen Sie es uns bitte wissen!
modifyClass und lookup() Aufrufe
Diese Klassen existieren nicht mehr. modifyClass funktioniert stillschweigend nicht mehr. Lookups geben null zurück (und können daher zu Fehlern führen). In den meisten Fällen haben wir Shims für Abwärtskompatibilität eingeführt (siehe Fußnoten).
controller:discoverycontroller:discovery/topics[1]controller:discovery-sortable(->controller:discovery/list)controller:discovery-filter(->controller:discovery/filter)controller:navigation/categoriescontroller:navigation/category[2]controller:navigation/defaultcontroller:tag/show[3]controller:discovery.*(->controller:discovery/list)
Diese Klassen wurden erheblich umstrukturiert. modifyClass- und lookup-Aufrufe müssen möglicherweise umstrukturiert werden:
route/discoveryroute/discovery.*route/tag-show
Routen
Routennamen (d. h. router.currentRouteName) sind unverändert.
Die model()-Hooks der Discovery-Route (d. h. router.currentRoute.attributes) sind größtenteils unverändert.
Plugin-Outlets
Alle Plugin-Outlets und ihre Argumente sind unverändert.
HTML / CSS
HTML-Struktur und Klassen sind weitgehend unberührt.