Sto lavorando su un plugin che richiede alcune finestre di dialogo modali; so, dopo aver cercato su Meta, che sia il componente Ember che il widget Discourse possono implementarle. Sia il componente Ember che il widget Discourse possono essere collegati a un’uscita del plugin (plugin outlet), renderizzare HTML e gestire eventi.
Ho trovato solo un argomento sui widget sopra citato, che afferma semplicemente che i widget Discourse possono essere renderizzati più velocemente. Tuttavia, ho notato che sia il nucleo di Discourse che molti altri plugin utilizzano sia i componenti Ember che i widget Discourse. Ad esempio:
Qualcuno può spiegarmi qual è la differenza?
Grazie.
I componenti sono ampiamente utilizzati nella maggior parte di Discourse. I widget risultano utili su alcuni degli elementi più trafficati, come il flusso dei messaggi di un argomento e l’intestazione con i suoi molteplici menu.
Spesso vedrai i widget utilizzati in plugin e temi per aggiungere o modificare widget esistenti.
Prendi ad esempio questo widget nel plugin discourse-calendar:
Si tratta di un pulsante renderizzato nel messaggio originale di un argomento. Deve essere un widget perché il messaggio stesso è renderizzato come widget per motivi di prestazioni.
MA se guardi alle righe 11-17 di quel file, puoi vedere un template Handlebars definito in JavaScript tramite l’helper hbs, e in quel template ci sono componenti renderizzati come {{i18n ...}}.
Quindi, in generale, puoi utilizzare i componenti a meno che l’elemento dell’interfaccia utente non sia già renderizzato come widget. In tal caso, usa un widget. E se ha senso, puoi utilizzare componenti esistenti all’interno del widget.
Alcune regole empiriche per la scelta tra componenti e widget:
Se devi visualizzarne molti, probabilmente è meglio optare per i widget per motivi di prestazioni.
I widget sono più limitati rispetto ai componenti e richiedono una maggiore conoscenza per funzionare perfettamente quando si costruiscono interfacce utente complesse.
Quindi, in sintesi: se le prestazioni non sono un problema e posso farlo, preferisco i componenti. Se le prestazioni sono un fattore critico o se sono costretto (ad esempio, quando uso l’API dei plugin per decorare un altro widget), probabilmente userò i widget.