Una estrategia interesante para pasar propiedades a través de los outlets de plugins de plantillas raw

Una pregunta rápida sobre esto.

Noté algo interesante en TLT:

Aquí no se pasa el modelo.

Sin embargo, logras hacer esto:

Solo puedo suponer que esta es una estrategia estable para pasar las propiedades del modelo porque se está empleando aquí. ¿Alguna advertencia?

Una de las razones por las que encontraba estos plugin outlets disponibles menos útiles era porque a menudo no pasan explícitamente el modelo relevante.

¿Está este patrón documentado en alguna parte? No lo he visto en las guías de Ember…

3 Me gusta

El sistema ‘raw’ es algo específico del discurso, por lo que no encontrarás nada sobre él en las guías de Ember.

Parece que es bastante deliberado en el código principal, así que creo que es seguro usarlo:

De hecho, no parece que los ‘raw outlets’ tengan la capacidad de pasar nada como los ‘args’ que encuentras en los ‘plugin-outlets’ regulares. Así que context es la única forma de proceder.

Por favor, siéntete libre de hacer PRs al core si crees que falta algún dato útil en los ‘plugin outlets’ regulares. Añadir nuevos argumentos a los ‘outlets’ es relativamente seguro, compatible con versiones anteriores y tiene un impacto de rendimiento insignificante, por lo que es poco probable que lo rechacemos.

7 Me gusta

También he tenido problemas para pasar argumentos a los outlets de los plugins. Mi objetivo ha sido colocar un outlet de plugin en una página y que el outlet obtenga acceso a toda la información que los otros componentes referencian en esa página.

Intenté esto en un componente de tema que estoy codificando:

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

Pero obtengo el error: Compile Error: raw-plugin-outlet is not a helper

¿Hay algo más que necesite hacer para que esto funcione?

raw-plugin-outlet solo se puede usar dentro de plantillas ‘raw’ (aquellas que terminan en .hbr). Para plantillas de ember normales, deberías usar {{plugin-outlet ...}}

1 me gusta

EDITAR: Me di cuenta de que lo siguiente probablemente sea mejor para su propio tema. También me di cuenta de que el problema principal que tengo es importar las acciones de un componente a un plugin outlet. He hecho una pregunta al respecto aquí:


¿Hay una forma más simple/estándar de pasar argumentos correctamente a un plugin outlet?

Por ejemplo:

Si en una plantilla existe la siguiente referencia al componente composer-action-title, así:
composer.hbs:

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

y quisiera agregar un plugin outlet que, en ese plugin outlet, tuviera el mismo código, como:
connectors/cool-outlet/cool-outlet.hbs:

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

¿Qué necesito hacer para permitir que mi plugin outlet cool-outlet tenga la capacidad de referenciar correctamente el componente composer-action-title?

Usar una referencia como:
{{plugin-outlet name="cool-outlet" args=(hash model=model)}}
en composer.hbs no parece funcionar.