Estou trabalhando em um plugin que precisa de alguns diálogos modais, tanto o componente Ember quanto o widget do Discourse podem implementá-los, conforme sei após pesquisar no Meta. Tanto o componente Ember quanto o widget do Discourse podem ser anexados a uma saída de plugin (plugin outlet), renderizar HTML e lidar com eventos.
Consegui encontrar apenas um tópico sobre widgets acima; ele apenas mencionou que o widget do Discourse pode renderizar mais rápido. No entanto, notei que tanto o núcleo do Discourse quanto muitos outros plugins utilizam tanto componentes Ember quanto widgets do Discourse. Por exemplo:
Alguém pode me dizer qual é a diferença?
Obrigado.
Os componentes são amplamente utilizados na maior parte do Discourse. Os widgets são úteis em alguns dos elementos com maior tráfego, como o fluxo de postagens de tópicos e o cabeçalho com seus vários menus.
Você verá frequentemente widgets sendo usados em plugins e temas para adicionar ou modificar widgets existentes.
Por exemplo, considere este widget no plugin discourse-calendar:
Este é um botão renderizado na postagem original de um tópico. Ele precisa ser um widget porque a própria postagem é renderizada como um widget por questões de desempenho.
MAS, se você observar as linhas 11 a 17 desse arquivo, verá um modelo Handlebars definido no JavaScript por meio do assistente hbs, e nesse modelo há componentes renderizados como {{i18n ...}}.
Portanto, de modo geral, você pode usar componentes a menos que o elemento da interface do usuário já esteja renderizado como um widget. Nesse caso, use um widget. E, se fizer sentido, você pode utilizar componentes existentes dentro do widget.
Algumas regras práticas para escolher componentes/widgets:
Se você estiver exibindo muitos itens, provavelmente deverá optar por widgets para melhor desempenho.
Widgets são mais limitados que componentes e exigem mais conhecimento para que algo funcione perfeitamente ao criar interfaces complexas.
Basicamente, se o desempenho não for uma questão e eu puder usar, prefiro componentes. Se o desempenho for uma questão ou se eu for obrigado (por exemplo, ao usar a API de plugins para decorar outro widget), provavelmente usarei widgets.