Wie fügt man die Aktionen einer Komponente in einen Plugin-Outlet ein?

Ich versuche, eine vorhandene Komponente in einem Plugin-Outlet zu referenzieren, aber ich bekomme ständig Fehler. Und das Hauptproblem scheinen die Aktionen zu sein, die mit der Komponente verbunden sind. Gibt es eine richtige Methode, um auf die Aktionen einer anderen Komponente in einem Plugin-Outlet zu verweisen?

Ich hätte gedacht, dass in einem Plugin-Outlet die einfache Referenzierung der Komponente (d. h. {{component-name action=(action \"doSomething\")...}}) ausreichen würde, um den gesamten relevanten Code der Aktionen dieser Komponente einzubinden. Aber das scheint nicht der Fall zu sein – denn ich erhalte ständig verschiedene Fehler bezüglich undefinierter Dinge, falscher Definitionen und anderer Probleme, die darauf hindeuten, dass der JavaScript-Code der Aktion nicht richtig in das Plugin-Outlet geladen wird.


Zum Beispiel:

Wenn in einer Vorlage die folgende Referenz auf die Komponente composer-action-title vorhanden ist, wie hier:
composer.hbs:

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

und ich ein Plugin-Outlet hinzufügen möchte, das – in diesem Plugin-Outlet – den gleichen Code enthält, wie:

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

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

Was muss ich tun, damit mein cool-outlet-Plugin-Outlet die Komponente composer-action-title erfolgreich referenzieren kann, einschließlich der Aktionen “openComposer” und “closeComposer”?

Ich glaube, ich habe das Grundlegende verstanden – obwohl ich mich freue, wenn andere Vorschläge haben.

Um Aktionen und andere Argumente an einen Plugin-Outlet weiterzugeben, können Sie sie genauso zur Plugin-Outlet-Referenz hinzufügen, wie Sie es mit einer Referenz zu einer Komponente tun können.

Aber achten Sie darauf, dass Sie die richtigen Argumente übergeben – d. h. die richtigen Variablenreferenzen.

Anhand meines Beispiels: Hier ist eine Komponentenreferenz, die in der Vorlage composer.hbs erscheint:

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

Wenn Sie diese Referenz durch eine Referenz auf einen Plugin-Outlet ersetzen möchten (wobei Sie natürlich vorsichtig sein müssen, wenn Sie eine Vorlagendatei bearbeiten, da die Wartung mit zunehmenden Änderungen in Discourse schwieriger wird), und Sie möchten, dass der Plugin-Outlet selbst auf die composer-action-title-Komponente verweist, könnten Sie dies in composer.hbs einfügen:

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

Und dann sollte dies in connectors/cool-outlet/cool-outlet.hbs funktionieren, um auf die composer-action-title-Komponente zu verweisen:

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

Beachten Sie hier die Variablen, das sind die Variablen, die in der composer.hbs-Datei festgelegt wurden.