« Le composant a été créé avec gjs » - mais ce n'est pas le cas

Sur la version stable, 3.4.1.

J’ai ceci dans mon plugin
/assets/javascripts/discourse/controllers/user-feedback.js

et ensuite
/assets/javascripts/discourse/templates/user-feedback.hbs contient

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

Et ensuite ces fichiers :

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

C’est l’erreur que j’obtiens dans la console de mon navigateur.

**
/discourse/templates/components/feedback-stream] feedback-stream a été créé avec gjs et son template ne peut pas être remplacé. Ignorer le remplacement. Pour plus d’informations sur l’avenir des remplacements de templates, voir (not recommended) Overriding Discourse templates from a Theme or Plugin
**
Mais, comme vous pouvez le voir, il n’a pas été créé avec gjs.

Maintenant, j’ai décidé d’ignorer cette erreur pour le moment et j’ai continué à moderniser le plugin. Dès que j’ai colocalisé les templates (donc mv templates/components/* components), l’erreur a disparu. Mais le template est toujours ignoré.

2 « J'aime »

Ok, les pièces du puzzle semblent se connecter.

Le composant fait

export default class FeedbackStream extends UserStream {

et UserStream est écrit en utilisant gjs.

Outre le message d’erreur incorrect, comment pourrais-je moderniser cela et faire en sorte que les choses fonctionnent à nouveau ?

1 « J'aime »

Quel est le but de vos modifications ? Afin que nous puissions comprendre le contexte.

Je crois qu’avec gjs, vous ne pouvez compter que sur les points de sortie des plugins. :thinking:

Le but de mes modifications actuelles est de faire fonctionner à nouveau le plugin sur la dernière version stable :slight_smile:

Le but de cette partie spécifique du plugin est d’afficher des commentaires sur la page de profil d’un utilisateur, tout en réutilisant largement les composants existants.

Si vous utilisez gjs pour votre FeedbackStream, alors je pense que cela devrait fonctionner. Ce serait donc quelque chose comme

export default class FeedbackStream extends UserStream {
  <template>
    Votre modèle personnalisé ici
  </template>
}

Je pense que mélanger hbs/gjs dans la même chaîne d’héritage de composant ne fonctionnera probablement pas très bien.

3 « J'aime »

Au fait @Arkshine je vois votre :exploding_head: - donc juste pour clarifier ici. Les remplacements de modèles sont dépréciés, quel que soit le format d’origine. Nous les supprimerons complètement dans les prochains mois. Pour ces cas, vous avez 100% raison de dire que les Plugin Outlets sont la solution.

Mais ce que @RGJ fait ici n’est pas un remplacement de modèle, c’est utiliser le système d’héritage de composants d’Ember. Au lieu de faire

class Foo extends Component

vous pouvez faire

class Foo extends SomeOtherComponent

Dans ce cas, votre composant héritera du modèle de SomeOtherComponent, ou vous pourrez choisir de remplacer le modèle vous-même. Votre remplacement de modèle ne s’applique qu’à Foo, et n’affectera pas le composant parent SomeOtherComponent.

Ce type d’héritage est cependant une fonctionnalité assez rarement utilisée. Nous avons tendance à privilégier la « composition », où vous encapsulez des composants les uns dans les autres dans un modèle. (par exemple, c’est ainsi que DModal est utilisé)

5 « J'aime »

Ah, je vois ; merci pour la clarification ! Je n’avais pas compris l’héritage ici. Cela a du sens.

3 « J'aime »

Merci pour votre aide rapide et votre explication claire David !

4 « J'aime »

Ce sujet a été automatiquement fermé 30 jours après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.