„Komponente wurde mit gjs erstellt“ – ist sie aber nicht

Auf Stable, 3.4.1.

Ich habe das in meinem Plugin
/assets/javascripts/discourse/controllers/user-feedback.js

und dann
/assets/javascripts/discourse/templates/user-feedback.hbs enthält

{{feedback-stream stream=this.model}}

Und dann diese Dateien:

/assets/javascripts/discourse/components/feedback-stream.js
/assets/javascripts/discourse/templates/components/feedback-stream.hbs

Das ist der Fehler, den ich in meiner Browserkonsole erhalte.

**
/discourse/templates/components/feedback-stream] feedback-stream wurde mit gjs erstellt und seine Vorlage kann nicht überschrieben werden. Überschreiben wird ignoriert. Weitere Informationen zur Zukunft von Vorlagenüberschreibungen finden Sie unter (not recommended) Overriding Discourse templates from a Theme or Plugin
**
Aber, wie Sie sehen können, wurde es nicht mit gjs geschrieben.

Jetzt habe ich beschlossen, diesen Fehler vorerst zu ignorieren und fuhr mit der Modernisierung des Plugins fort. Sobald ich die Vorlagen zusammengelegt habe (also mv templates/components/* components), verschwand der Fehler. Aber die Vorlage wird immer noch ignoriert.

2 „Gefällt mir“

Ok, die Teile des Puzzles scheinen sich zu verbinden.

Die Komponente macht

export default class FeedbackStream extends UserStream {

und UserStream ist mit gjs geschrieben.

Abgesehen von der falschen Fehlermeldung, wie würde ich das modernisieren und die Dinge wieder zum Laufen bringen?

1 „Gefällt mir“

Was ist der Zweck Ihrer Änderungen? Damit wir den Kontext verstehen können.

Ich glaube, mit gjs kann man sich nur auf Plugin-Outlets verlassen. :thinking:

Der Zweck meiner aktuellen Änderungen ist es, das Plugin auf der neuesten stabilen Version wieder zum Laufen zu bringen :slight_smile:

Der Zweck dieses speziellen Teils des Plugins ist es, Feedback auf der Profilseite eines Benutzers anzuzeigen, wobei vorhandene Komponenten stark wiederverwendet werden.

Wenn Sie gjs für Ihren FeedbackStream verwenden, dann sollte es funktionieren. Es wäre also so etwas wie

export default class FeedbackStream extends UserStream {
  <template>
    Your custom template here
  </template>
}

Ich glaube, dass die Mischung von hbs/gjs in derselben Komponentenerbfolge wahrscheinlich nicht gut funktionieren wird.

3 „Gefällt mir“

Übrigens @Arkshine, ich sehe dein :exploding_head: – nur zur Klarstellung. Template-Überschreibungen sind veraltet, unabhängig vom ursprünglichen Erstellungsformat. Wir werden sie in den nächsten Monaten vollständig entfernen. Für diese Fälle hast du zu 100 % Recht, dass Plugin-Outlets die Lösung sind.

Aber was @RGJ hier tut, ist keine Template-Überschreibung, sondern die Nutzung des Ember-Komponenten-Vererbungssystems. Anstatt

class Foo extends Component

zu tun, kannst du

class Foo extends SomeOtherComponent

tun. In diesem Fall erbt deine Komponente das Template von SomeOtherComponent, oder du kannst dich entscheiden, das Template selbst zu ersetzen. Deine Template-Ersetzung gilt nur für Foo und beeinträchtigt nicht die übergeordnete SomeOtherComponent.

Diese Art der Vererbung ist jedoch eine eher selten genutzte Funktion. Wir tendieren eher zur „Komposition“, bei der Komponenten ineinander verschachtelt werden (z. B. so wird DModal verwendet).

5 „Gefällt mir“

Oh, ich verstehe; danke für die Klarstellung! Ich habe die Vererbung hier nicht erkannt. Das ergibt Sinn.

3 „Gefällt mir“

Vielen Dank für die schnelle Hilfe und die klare Erklärung, David!

4 „Gefällt mir“

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Neue Antworten sind nicht mehr erlaubt.