Wie unterscheiden sich Ember-Komponenten und Discourse-Widgets?

Ich arbeite an einem Plugin, das einige Modal-Dialoge benötigt. Sowohl Ember-Komponenten als auch Discourse-Widgets können dies umsetzen – das habe ich nach einer Suche im Meta-Forum herausgefunden. Sowohl Ember-Komponenten als auch Discourse-Widgets können an Plugin-Ausgänge angehängt werden, HTML rendern und Ereignisse verarbeiten.

Ich habe nur ein Thema über Widgets gefunden; darin wird lediglich erwähnt, dass Discourse-Widgets schneller rendern können. Allerdings verwenden sowohl der Discourse-Kern als auch viele andere Plugins sowohl Ember-Komponenten als auch Discourse-Widgets. Zum Beispiel:

Kann mir jemand erklären, was der Unterschied ist?
Danke.

Komponenten werden in den meisten Bereichen von Discourse weit verbreitet eingesetzt. Widgets sind dort nützlich, wo es sich um einige unserer am stärksten frequentierten Elemente handelt, wie etwa den Themen-Beitragsstrom und die Kopfzeile mit ihren mehreren Menüs.

Oft werden Widgets in Plugins und Themes verwendet, um bestehende Widgets zu erweitern oder zu modifizieren.

Nehmen wir zum Beispiel dieses Widget im discourse-calendar-Plugin:

Dies ist eine Schaltfläche, die im Originalbeitrag eines Themas gerendert wird. Sie muss ein Widget sein, da der Beitrag selbst aus Leistungsgründen als Widget gerendert wird.

ABER: Wenn Sie sich die Zeilen 11–17 dieser Datei ansehen, sehen Sie ein Handlebars-Template, das über den hbs-Helper in JavaScript definiert ist. In diesem Template werden Komponenten wie {{i18n ...}} gerendert.

Im Allgemeinen können Sie Komponenten verwenden, es sei denn, das UI-Element wird bereits als Widget gerendert. In diesem Fall verwenden Sie ein Widget. Und falls sinnvoll, können Sie bestehende Komponenten innerhalb des Widgets nutzen.

Vielen Dank für Ihre Antwort! Genau das wollte ich wissen.

Einige Faustregeln für die Auswahl von Komponenten/Widgets:

  • Wenn Sie viele davon anzeigen, sollten Sie wahrscheinlich Widgets für die Leistung wählen.
  • Widgets sind eingeschränkter als Komponenten und erfordern mehr Wissen, um bei der Erstellung komplexer Benutzeroberflächen etwas perfekt zum Laufen zu bringen.

Also, grundsätzlich: Wenn die Leistung kein Thema ist und ich sie verwenden kann, bevorzuge ich Komponenten. Wenn die Leistung ein Thema ist oder wenn ich dazu gezwungen bin (z. B. durch die Verwendung der Plugin-API, um ein anderes Widget zu dekorieren), werde ich wahrscheinlich Widgets verwenden.