"Componente foi criado usando gjs" - mas não é

Em estável, 3.4.1.

Tenho isto no meu plugin
/assets/javascripts/discourse/controllers/user-feedback.js

e depois
/assets/javascripts/discourse/templates/user-feedback.hbs contém

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

E depois estes arquivos:

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

Este é o erro que estou recebendo no console do meu navegador.

**
/discourse/templates/components/feedback-stream] feedback-stream foi criado usando gjs e seu template não pode ser substituído. Ignorando substituição. Para mais informações sobre o futuro das substituições de templates, veja (not recommended) Overriding Discourse templates from a Theme or Plugin
**
Mas, como você pode ver, ele não foi escrito usando gjs.

Agora decidi ignorar este erro por enquanto e continuei modernizando o plugin. Assim que co-localizei os templates (então mv templates/components/* components) o erro desapareceu. Mas o template ainda é ignorado.

2 curtidas

Ok, as peças do quebra-cabeça parecem estar se conectando.

O componente faz

export default class FeedbackStream extends UserStream {

e UserStream é escrito usando gjs.

Deixando de lado a mensagem de erro incorreta, como eu modernizaria isso e faria as coisas voltarem a funcionar?

1 curtida

Qual o propósito das suas alterações? Para que possamos entender o contexto.

Acredito que com gjs, você só pode confiar em plugin outlets. :thinking:

O objetivo das minhas alterações atuais é fazer o plugin voltar a funcionar na versão estável mais recente :slight_smile:

O objetivo desta parte específica do plugin é mostrar feedback na página de perfil de um usuário, reutilizando fortemente componentes existentes.

Se você usar gjs para o seu FeedbackStream, então acho que deve funcionar. Assim, seria algo como

export default class FeedbackStream extends UserStream {
  <template>
    Seu template personalizado aqui
  </template>
}

Acho que misturar hbs/gjs na mesma cadeia de herança de componentes provavelmente não funcionará muito bem.

3 curtidas

Aliás @Arkshine, vejo seu :exploding_head: - então, apenas para esclarecer aqui. Substituições de template estão obsoletas, independentemente do formato original de autoria. Nós as removeremos completamente nos próximos meses. Para esses casos, você está 100% certo de que os Plugin Outlets são a solução.

Mas o que @RGJ está fazendo aqui não é uma substituição de template, é usar o sistema de herança de componentes do Ember. Em vez de fazer

class Foo extends Component

você pode fazer

class Foo extends SomeOtherComponent

Nesse caso, seu componente herdará o template de SomeOtherComponent, ou você pode optar por substituir o template você mesmo. Sua substituição de template se aplica apenas a Foo e não afetará o SomeOtherComponent pai.

No entanto, esse tipo de herança é um recurso raramente usado. Tendemos a preferir a “composição”, onde você envolve componentes uns nos outros dentro de um template. (por exemplo, é assim que DModal é usado)

5 curtidas

Ah, entendi; obrigado por esclarecer! Eu não tinha percebido a herança aqui. Faz sentido.

3 curtidas

Obrigado pela ajuda rápida e pela explicação clara, David!

4 curtidas

Este tópico foi fechado automaticamente 30 dias após a última resposta. Novas respostas não são mais permitidas.