Comment ajouter les actions d'un composant à un plugin-outlet ?

J’essaie de référencer un composant existant dans un plugin-outlet, mais je reçois constamment des erreurs. Le problème principal semble être lié aux actions associées au composant. Existe-t-il une manière appropriée de référencer les actions d’un autre composant dans un plugin-outlet ?

J’aurais pensé que dans un plugin-outlet, il suffirait de référencer le composant (par exemple, {{component-name action=(action \"doSomething\")...}}) pour inclure tout le code pertinent des actions de ce composant. Mais il semble que ce ne soit pas le cas, car je reçois diverses erreurs indiquant que certaines choses sont indéfinies, mal définies, ou d’autres problèmes suggérant que le code JavaScript de l’action n’est pas correctement intégré dans le plugin-outlet.


Par exemple :

Si dans un template, il y a la référence suivante au composant composer-action-title, comme ceci :
composer.hbs :

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

Et si je voulais ajouter un plugin-outlet qui – dans ce plugin-outlet – contiendrait le même code, comme ceci :

connectors/cool-outlet/cool-outlet.hbs :

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

Que dois-je faire pour permettre à mon plugin-outlet cool-outlet de référencer avec succès le composant composer-action-title, y compris les actions “openComposer” et “closeComposer” ?

Je pense avoir saisi l’essentiel – bien que je sois ouvert aux suggestions d’autres personnes.

Pour transmettre des actions et d’autres arguments à un point de sortie de plugin, vous pouvez les ajouter à la référence du point de sortie du plugin, tout comme vous le feriez avec une référence à un composant.

Mais attention à passer les bons arguments, c’est-à-dire les bonnes références de variables.

En reprenant mon exemple : voici une référence de composant qui apparaît dans le template composer.hbs :

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

Si vous souhaitez remplacer cette référence par une référence à un point de sortie de plugin (en faisant évidemment attention si vous modifiez un fichier de template, étant donné la difficulté accrue de maintenance des choses à mesure que Discourse évolue), et que vous souhaitez que le point de sortie du plugin lui-même référence le composant composer-action-title, vous pourriez mettre ceci dans composer.hbs :

{{plugin-outlet name="cool-outlet" args=(hash
       model=model
       openComposer=(action "openComposer")
       closeComposer=(action "closeComposer")
       canWhisper=canWhisper
       tabindex=8
    )
}}

Et ensuite, dans connectors/cool-outlet/cool-outlet.hbs, ceci devrait fonctionner pour référencer le composant composer-action-title :

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

Notez les variables ici, ce sont les variables définies dans le fichier composer.hbs.