Grazie @Arkshine! Penso di aver capito come passare azioni in un componente glimmer in generale. Tuttavia, l’helper route-action si è spostato lungo la gerarchia delle route per invocare un’azione che non è dichiarata nello scope locale. Quindi potresti semplicemente dichiararla sul componente, ad esempio:
Potrei semplicemente lavorare sul template, preoccupandomi meno della logica invocata perché viene passata automaticamente (dal mio punto di vista :). Cosa che mi piaceva, ma non capisco se quella fosse mai una best practice e se/come potrei accedervi ora in un componente glimmer.
Hai ragione; colpa mia. Ho risposto automaticamente senza pensarci molto. (beh, erano le 5 del mattino ).
Al momento non ho la risposta alla tua domanda, ma ti farò sapere se scopro qualcosa da parte mia!
import { get } from "@ember/object";
import { routeAction } from 'discourse/helpers/route-action';
{{on "click" (routeAction "showLogin" (get this "router._router"))}}
Presuppone che tu abbia il servizio router definito nel componente.
Non sono sicuro se sia considerata una cattiva pratica. Non sembra una buona idea, ma funziona.
Beh, potrei semplicemente lasciar perdere per ora, il componente funziona bene così com’è. Sto solo cercando di capire un po’ meglio come funzionano alcune cose sotto il cofano
Penso che se usi l’esportazione predefinita, dovrebbe funzionare come previsto (cioè senza dover iniettare il servizio router o passargli manualmente un riferimento)
import routeAction from "discourse/helpers/route-action";
(non sono sicuro del perché ci sia anche una funzione interna esportata come routeAction… piuttosto confuso! Risolviamo questo problema)
Anche se direi… in generale stiamo cercando di muoverci verso ‘closure actions’ come {{on \"click\" this.someFunction}} piuttosto che cose basate su stringhe come {{action \"blah\"}} o {{routeAction \"blah\"}}.