"Il componente è stato scritto con gjs" - ma in realtà no

Su stabile, 3.4.1.

Ho questo nel mio plugin
/assets/javascripts/discourse/controllers/user-feedback.js

e poi
/assets/javascripts/discourse/templates/user-feedback.hbs contiene

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

E poi questi file:

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

Questo è l’errore che sto ricevendo nella console del mio browser.

/discourse/templates/components/feedback-stream] feedback-stream è stato creato utilizzando gjs e il suo template non può essere sovrascritto. Ignorando la sovrascrittura. Per maggiori informazioni sul futuro delle sovrascritture dei template, vedi https://meta.discourse.org/t/247487 Ma, come puoi vedere, non è stato scritto utilizzando gjs.

Ora ho deciso di ignorare questo errore per ora e ho continuato ad ammodernare il plugin. Appena ho collocato i template (quindi mv templates/components/* components) l’errore è scomparso. Ma il template viene ancora ignorato.

2 Mi Piace

Ok, i pezzi del puzzle sembrano andare al loro posto.

Il componente fa

export default class FeedbackStream extends UserStream {

e UserStream è scritto usando gjs.

A parte il messaggio di errore errato, come potrei modernizzare questo e far tornare tutto a funzionare?

1 Mi Piace

Qual è lo scopo delle tue modifiche? Così possiamo capire il contesto.

Credo che con gjs si possa fare affidamento solo sugli outlet dei plugin. :thinking:

Lo scopo delle mie modifiche attuali è far tornare funzionante il plugin sull’ultima versione stabile :slight_smile:

Lo scopo di questa parte specifica del plugin è mostrare un feedback sulla pagina del profilo di un utente, riutilizzando ampiamente i componenti esistenti.

Se usi gjs per il tuo FeedbackStream, allora penso che dovrebbe funzionare. Quindi sarebbe qualcosa del tipo

export default class FeedbackStream extends UserStream {
  <template>
    Il tuo template personalizzato qui
  </template>
}

Penso che mescolare hbs/gjs nella stessa catena di ereditarietà dei componenti non funzionerà molto bene.

3 Mi Piace

Comunque @Arkshine vedo il tuo :exploding_head: - quindi solo per chiarire. Le sovrascritture dei template sono deprecate, indipendentemente dal formato di authoring originale. Le rimuoveremo completamente nei prossimi mesi. Per quei casi, hai ragione al 100% sul fatto che i Plugin Outlets siano la soluzione.

Ma quello che @RGJ sta facendo qui non è una sovrascrittura di template, sta usando il sistema di ereditarietà dei componenti di Ember. Invece di fare

class Foo extends Component

puoi fare

class Foo extends SomeOtherComponent

In quel caso, il tuo componente erediterà il template di SomeOtherComponent, o puoi scegliere di sostituire tu stesso il template. La tua sostituzione del template si applica solo a Foo e non influenzerà il genitore SomeOtherComponent.

Questo tipo di ereditarietà è comunque una funzionalità piuttosto raramente utilizzata. Tendiamo a preferire la “composizione”, dove si incapsulano i componenti l’uno nell’altro all’interno di un template. (ad esempio, è così che viene utilizzato DModal)

5 Mi Piace

Oh, capisco; grazie per la chiarificazione! Non avevo visto l’ereditarietà qui. Ha senso.

3 Mi Piace

Grazie per il rapido aiuto e la chiara spiegazione David!

4 Mi Piace

Questo argomento è stato automaticamente chiuso 30 giorni dopo l’ultima risposta. Non sono più ammessi nuovi commenti.