Ember.js
# Ember.js

O Ember.js, ou somente Ember, é um framework web JavaScript de código aberto, baseado na arquitetura Model–view–viewmodel (MVVM). Ele permite aos desenvolvedores aplicativos web de página única escaláveis, ao incorporar expressões idiomáticas comuns e boas práticas de desenvolvimento em seu núcleo.
Ember é usado em muitos sites populares, incluindo Discourse, Groupon, LinkedIn, Vine, Twitch.tv e Chipotle. Embora inicialmente considerado um framework somente para a web, também é possível criar aplicações para dispositivos móveis e para desktop com o uso de Ember. O exemplo mais notável de um aplicativo Ember para desktop é o Apple Music, uma funcionalidade do iTunes para desktop.

## Conceitos básicos

Ember é composto por cinco conceitos-chave:

### Rotas (Routes)

    No Ember, o estado de uma aplicação é representada por uma URL. Cada URL tem um objeto de rota correspondente que controla o que é visível para o usuário.

### Modelos (Models)

    Cada rota tem um modelo associado, contendo os dados associados ao estado atual do aplicativo. Embora seja possível usar jQuery para carregar objetos JSON de um servidor e usar esses objetos como modelos, a maioria dos aplicativos usa uma biblioteca de modelos, como Ember Data, para lidar com isso.

### Padrões (Templates)

    Templates são usados para criar o HTML do aplicativo e são escritos com a linguagem de templates HTMLBars. (HTMLBars é uma variação do Handlebars que cria elementos DOM em vez de uma String.)

### Componentes

    Um componente é uma tag HTML personalizada. O comportamento é implementado usando JavaScript e sua aparência é definida usando modelos HTMLBars. Componentes "são donos" de seus dados. Eles também podem ser aninhados e podem se comunicar com seus componentes pai por meio de ações (eventos). Outras bibliotecas de componentes, tais como Polymer também podem ser usadas com Ember.

### Serviços

    Serviços são apenas objetos singleton para armazenar dados de longa duração, como sessões de usuários.
Ember também fornece injeção de dependência, vinculação de dados bidirecional declarativa, propriedades computadas e templates auto-atualizáveis.