Estoy trabajando en un plugin que necesita algunos diálogos modales. Tanto el componente de Ember como el widget de Discourse pueden implementarlo; lo sé tras buscar en Meta. Tanto el componente de Ember como el widget de Discourse pueden adjuntarse a un outlet de plugin, renderizar HTML y manejar eventos.
Solo encontré un tema sobre widgets arriba; solo menciona que los widgets de Discourse pueden renderizar más rápido. Sin embargo, observé que tanto el núcleo de Discourse como muchos otros plugins utilizan tanto componentes de Ember como widgets de Discourse. Por ejemplo:
¿Alguien puede decirme cuál es la diferencia?
Gracias.
Los componentes se utilizan ampliamente en la mayor parte de Discourse. Los widgets resultan útiles en algunos de los elementos con más tráfico, como el flujo de publicaciones de los temas y la cabecera con sus múltiples menús.
A menudo verás que los plugins y temas utilizan widgets para añadir o modificar widgets existentes.
Por ejemplo, considera este widget del plugin discourse-calendar:
Se trata de un botón renderizado en la publicación original de un tema. Necesita ser un widget porque la propia publicación se renderiza como un widget por razones de rendimiento.
PERO si observas las líneas 11-17 de ese archivo, verás una plantilla Handlebars definida en JavaScript mediante el helper hbs, y en esa plantilla hay componentes que se renderizan como {{i18n ...}}.
Por lo general, puedes usar componentes a menos que el elemento de la interfaz de usuario ya esté renderizado como un widget. En ese caso, utiliza un widget. Y si tiene sentido, puedes aprovechar componentes existentes dentro del widget.
Algunas reglas generales para elegir componentes o widgets:
Si vas a mostrar muchos, probablemente quieras optar por widgets para mejorar el rendimiento.
Los widgets son más limitados que los componentes y requieren más conocimiento para que funcionen perfectamente al construir interfaces de usuario complejas.
Básicamente, si el rendimiento no es un problema y puedo usarlos, preferiré los componentes. Si el rendimiento es un problema o si estoy obligado a hacerlo (por ejemplo, al usar la API de complementos para decorar otro widget), probablemente usaré widgets.