No momento, um Ember.View está limitado às tags criadas para você pelo W3C. Mas se você deseja definir suas próprias tags HTML específicas do aplicativo e implementar o comportamento delas usando JavaScript? Na verdade, você não pode fazer isso com um Ember.View .
É exatamente isso que os componentes permitem que você faça. De fato, é uma idéia tão boa que o W3C esteja atualmente trabalhando na especificação de elementos personalizados .
A implementação de componentes da Ember tenta estar o mais próximo possível da especificação de componentes da Web. Uma vez que elementos personalizados estão amplamente disponíveis em navegadores, você deve ser capaz de migrar facilmente seus componentes Ember com o padrão W3C e tê-los ser usado por outras estruturas, bem que adotaram o novo padrão.
Isso é tão importante para nós que estamos trabalhando em estreita colaboração com os órgãos de padrões para garantir que nossa implementação de componentes corresponda ao roteiro da plataforma da web.
Também é importante notar que um Ember.Component é realmente um Ember.View (uma subclasse), mas que é completamente isolado . O acesso à propriedade em seus modelos vai para o objeto de exibição e as ações também são direcionadas ao objeto de exibição . Não há acesso ao ambiente context
externo ou externo aonde controller
todas as informações contextuais são passadas , o que não é o caso de um Ember.View que realmente tem acesso ao seu controlador circundante; por exemplo, dentro de um modo de exibição, você poderia fazer algo parecido com o this.get('controller')
que controlador atualmente associado à visualização.
Então, qual é a principal diferença entre uma visão e um componente?
Portanto, a principal diferença além desses componentes permite criar suas próprias tags e, em algum momento no futuro, quando os elementos personalizados estiverem disponíveis, também migrar / usar esses componentes em outras estruturas que suportam elementos personalizados, é que, em algum momento, um componente de brasa tornará uma visão um pouco obsoleta, dependendo do caso de implementação específico.
E qual seria um exemplo comum em que eu preferiria usar uma exibição sobre um componente e vice-versa?
Seguindo o exposto, isso depende claramente de seus casos de uso. Mas, como regra geral, se você precisar acessar o controlador circundante, etc., use um Ember.View , mas se quiser isolar a visualização e passar apenas as informações necessárias para torná-la independente de contexto e muito mais reutilizável, use um Ember.Component .
Espero que ajude.
Atualizar
Com a publicação do Road to Ember 2.0, agora você é incentivado a usar componentes em vez de visualizações na maioria dos casos.
{{view.xxxx}}
funciona em um componente da mesma maneira que em uma exibição.A resposta é simples: use componentes
De acordo com um vídeo de treinamento gravado em agosto de 2013, Yehuda Kats e Tom Dale (membros da equipe principal da Ember) disseram ao público para não usar visualizações, a menos que você seja um desenvolvedor de framework. Eles fizeram muitos aprimoramentos no guidão e introduziram componentes, portanto, as visualizações não são mais necessárias. As visualizações são usadas internamente para alimentar coisas como {{#if}} e {{outlet}}.
Os componentes também imitam de perto o padrão de componentes da Web que será incorporado ao navegador; portanto, há muitos benefícios colaterais em tornar-se confortável na construção de componentes de Ember.
Atualização 2014-11-27
Agora é ainda mais importante usar componentes em vez de visualizações, pois o Ember 2.0 usará Componentes Rotáveis quando uma rota for inserida, em vez de um controlador / exibição. Para comprovar seu aplicativo no futuro, é melhor ficar longe do Views.
Fontes:
fonte
Como está agora -
v2.x
sendo a versão estável atual - as visualizações foram completamente reprovadas. Dizem que as visualizações estão sendo removidas da API do Ember 2.0 .Portanto, o uso da
{{view}}
palavra-chave no Ember 2.0 acionará uma afirmação:Se você precisar usar modos de exibição no Ember 2.0, poderá usar o complemento de ember-legacy-views , que será compatível com o Ember até a versão 2.4 .
Então, para resumir - os componentes são o presente (visualizações sendo removidas) e o futuro - eles também substituirão os controladores. Consulte RFC de componentes roteáveis .
fonte