«El componente fue escrito usando gjs» - pero no es así

En estable, 3.4.1.

Tengo esto en mi plugin
/assets/javascripts/discourse/controllers/user-feedback.js

y luego
/assets/javascripts/discourse/templates/user-feedback.hbs contiene

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

Y luego estos archivos:

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

Este es el error que estoy recibiendo en la consola de mi navegador.

**
/discourse/templates/components/feedback-stream] feedback-stream fue creado usando gjs y su plantilla no puede ser sobrescrita. Ignorando sobrescritura. Para más información sobre el futuro de las sobrescrituras de plantillas, ver (not recommended) Overriding Discourse templates from a Theme or Plugin
**
Pero, como puedes ver, no fue escrito usando gjs.

Ahora decidí ignorar este error por ahora y continué modernizando el plugin. Tan pronto como coloqué las plantillas juntas (así que mv templates/components/* components) el error desapareció. Pero la plantilla todavía se ignora.

2 Me gusta

Ok, las piezas del rompecabezas parecen estar encajando.

El componente hace

export default class FeedbackStream extends UserStream {

y UserStream está escrito usando gjs.

Dejando de lado el mensaje de error incorrecto, ¿cómo podría modernizar esto y hacer que las cosas vuelvan a funcionar?

1 me gusta

¿Cuál es el propósito de tus cambios? Para que podamos entender el contexto.

Creo que con gjs, solo puedes depender de los puntos de conexión de los complementos. :thinking:

El propósito de mis cambios actuales es que el plugin vuelva a funcionar en la última versión estable :slight_smile:

El propósito de esta parte específica del plugin es mostrar comentarios en la página de perfil de un usuario, reutilizando en gran medida los componentes existentes.

Si usas gjs para tu FeedbackStream, entonces creo que debería funcionar. Así que sería algo como

export default class FeedbackStream extends UserStream {
  <template>
    Tu plantilla personalizada aquí
  </template>
}

Creo que mezclar hbs/gjs en la misma cadena de herencia de componentes probablemente no funcionará muy bien.

3 Me gusta

Por cierto, @Arkshine, veo tu :exploding_head: - así que solo para aclarar. Las anulaciones de plantillas están obsoletas, independientemente del formato de autoría original. Las eliminaremos por completo en los próximos meses. Para esos casos, tienes toda la razón en que los Plugin Outlets son la solución.

Pero lo que @RGJ está haciendo aquí no es una anulación de plantilla, está utilizando el sistema de herencia de componentes de Ember. En lugar de hacer

class Foo extends Component

puedes hacer

class Foo extends SomeOtherComponent

En ese caso, tu componente heredará la plantilla de SomeOtherComponent, o puedes optar por reemplazar la plantilla tú mismo. Tu reemplazo de plantilla solo se aplica a Foo y no afectará al componente padre SomeOtherComponent.

Sin embargo, este tipo de herencia es una característica poco utilizada. Tendemos a preferir la “composición”, donde envuelves componentes unos dentro de otros dentro de una plantilla. (por ejemplo, así es como se usa DModal)

5 Me gusta

Oh, ya veo; ¡gracias por aclararlo! No me percaté de la herencia aquí. Tiene sentido.

3 Me gusta

¡Gracias por la rápida ayuda y la clara explicación, David!

4 Me gusta

Este tema fue cerrado automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.