Uma estratégia interessante para passar propriedades através de outlets de plugin de template brutos

Uma pergunta rápida sobre isso.

Notei algo interessante no TLT:

Não há passagem do modelo aqui.

No entanto, você consegue fazer isso:

Só posso assumir que esta é uma estratégia estável para passar as propriedades do modelo, pois está sendo empregada aqui - alguma ressalva?

Um dos motivos pelos quais achei esses plugin outlets disponíveis menos úteis foi porque eles nem sempre passam explicitamente o modelo relevante.

Este padrão está documentado em algum lugar? Não vi nos guias do Ember…

3 curtidas

O sistema ‘raw’ é específico do Discourse, então você não encontrará nada sobre ele nos guias do Ember.

Parece que é bastante deliberado no código principal, então acho que é seguro usá-lo:

Na verdade, não parece que os ‘raw outlets’ tenham a capacidade de passar nada como os ‘args’ que você encontra em ‘plugin-outlets’ regulares. Portanto, context é a única maneira de ir.

Por favor, sinta-se à vontade para fazer PRs no core se você achar que algum dado útil está faltando nos ‘plugin outlets’ regulares. Adicionar novos argumentos aos ‘outlets’ é relativamente seguro, compatível com versões anteriores e tem um impacto de desempenho negligenciável, então é improvável que recusemos.

7 curtidas

Eu também tive dificuldades em passar argumentos para os outlets de plugins. Meu objetivo tem sido colocar um outlet de plugin em uma página e fazer com que o outlet tenha acesso a todas as informações que outros componentes referenciam naquela página.

Eu tentei isso em um componente de tema que estou codificando:

{{~raw-plugin-outlet name="cool-outlet" args=(hash model=model)}}

Mas recebo o erro: Compile Error: raw-plugin-outlet is not a helper

Preciso fazer mais alguma coisa para que isso funcione?

O raw-plugin-outlet só pode ser usado dentro de templates ‘raw’ (aqueles que terminam em .hbr). Para templates Ember regulares, você deve usar {{plugin-outlet ...}}

1 curtida

EDITAR: Percebi que o que está abaixo provavelmente é melhor para um tópico próprio. Também percebi que o principal problema que tenho é importar as ações de um componente para um plugin outlet. Fiz uma pergunta sobre isso aqui:


Existe uma maneira mais simples/padrão de passar argumentos com sucesso para um plugin outlet?

Por exemplo:

Se em um template houver a seguinte referência ao componente composer-action-title, assim:
composer.hbs:

 {{composer-action-title
       model=model
        openComposer=(action "openComposer")
        closeComposer=(action "closeComposer")
        canWhisper=canWhisper
        tabindex=8
  }}

e eu quisesse adicionar um plugin outlet que — nesse plugin outlet — tivesse o mesmo código, como:
connectors/cool-outlet/cool-outlet.hbs:

 {{composer-action-title
       model=model
        openComposer=(action "openComposer")
        closeComposer=(action "closeComposer")
        canWhisper=canWhisper
        tabindex=8
  }}

O que preciso fazer para permitir que meu plugin outlet cool-outlet tenha a capacidade de referenciar com sucesso o componente composer-action-title?

Usar uma referência como:
{{plugin-outlet name="cool-outlet" args=(hash model=model)}}
em composer.hbs não parece funcionar.