Una strategia interessante per passare proprietà tramite gli outlet del plugin raw template

Una domanda veloce su questo.

Ho notato qualcosa di interessante in TLT:

Non c’è alcun passaggio del modello qui.

Eppure riesci a fare questo:

Posso solo presumere che questa sia una strategia stabile per passare le proprietà del modello perché viene impiegata qui - ci sono delle avvertenze?

Uno dei motivi per cui trovavo questi plugin outlet disponibili meno utili era perché spesso non passano esplicitamente il modello pertinente.

Questo schema è documentato da qualche parte? Non l’ho visto nelle guide di Ember…

3 Mi Piace

Il sistema ‘raw’ è specifico per discourse, quindi non troverai nulla al riguardo nelle guide di Ember.

Sembra che sia piuttosto deliberato nel codice principale, quindi penso che sia sicuro usarlo:

Infatti, non sembra che i raw outlet abbiano la capacità di passare nulla come gli ‘args’ che trovi nei normali plugin-outlet. Quindi context è l’unica strada da percorrere.

Sentiti libero di creare PR al core se ritieni che manchino dati utili nei normali plugin outlet. Aggiungere nuovi argomenti agli outlet è relativamente sicuro, retrocompatibile e ha un impatto trascurabile sulle prestazioni, quindi è improbabile che venga rifiutato.

7 Mi Piace

Ho anche avuto difficoltà a passare argomenti agli outlet dei plugin. Il mio obiettivo è stato quello di inserire un outlet di plugin in una pagina e far sì che l’outlet ottenga accesso a tutte le informazioni che gli altri componenti referenziati ottengono in quella pagina.

Ho provato questo in un componente tema che sto codificando:

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

Ma ottengo l’errore: Compile Error: raw-plugin-outlet is not a helper

C’è qualcos’altro che devo fare per far funzionare questo?

raw-plugin-outlet può essere utilizzato solo all’interno di template ‘raw’ (quelli che terminano con .hbr). Per i normali template di Ember, dovresti usare {{plugin-outlet ...}}

1 Mi Piace

MODIFICA: Mi sono reso conto che quanto segue è probabilmente meglio per un argomento a sé stante. Mi sono anche reso conto che il problema principale che ho è importare le azioni di un componente in un plugin outlet. Ho posto una domanda al riguardo qui:


Esiste un modo più semplice/standard per passare correttamente gli argomenti a un plugin outlet?

Ad esempio:

Se in un template c’è il seguente riferimento al componente composer-action-title, in questo modo:
composer.hbs:

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

e volessi aggiungere un plugin outlet che – in quel plugin outlet – avesse lo stesso codice, come:
connectors/cool-outlet/cool-outlet.hbs:

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

Cosa devo fare per consentire al mio plugin outlet cool-outlet di fare riferimento correttamente al componente composer-action-title?

Usare un riferimento come:
{{plugin-outlet name="cool-outlet" args=(hash model=model)}}
in composer.hbs non sembra funzionare.