Ember.js

**Ember.js** on avatud lähtekoodiga JavaScripti raamistik veebirakenduste loomiseks. See põhineb Model-View-Controlleri (MVC) arhitektuurimustril.

Ember on peamiselt mõeldud skaleeritavate ja üheleheliste veebirakenduste (ingl *single-page application*) loomiseks, kuid see võimaldab luua ka arvuti- ja mobiilirakendusi. Emberi raamistikku kasutavad veebilehed nagu LinkedIn, Netflix, Heroku, Microsoft ja TED. Üks silmapaistvamaid näiteid arvutirakendusest on Apple Music.

## Arhitektuur
Ember on võimalik liigitada viieks kihiks.

### Marsruudid
Marsruudid (ingl *routes*) ehk veebiaadressid on Emberi üks tähtsaim osa. Ember kasutab veebiaadresse selleks, et defineerida mudelid, mida komponendid hiljem kasutama ja kuvama hakkavad.

Veebiaadresse saab määrata mitmel viisil:

* rakenduse esmasel laadimisel;
* veebiaadressis manuaalselt muudatusi tehes;
* klõpsates rakendusesisest linki;
* tehes rakenduses konkreetse toimingu.

Pärast veebiaadressi määramist antakse aadress edasi vastavale töötlejale (ingl *route handler*), mis kas visualiseerib (ingl *rendering*) valmis malli või laadib mudeli.

### Mallid
Mallid (ingl *templates*) on mõeldud selleks, et organiseerida HTML-koodi ja visualiseerida kasutajaliidest. Ember kasutab Handlebars mallide teeki (ingl *handlebars templating library*), mis sisaldab staatilist HTML-i ja võimaldab loogeliste sulgude vahel välja kutsuda dünaamilist sisu. Sellist dünaamilise sisu kasutamist nimetatakse andmete sidumiseks (ingl *data binding*). Muutuja või atribuut, mida loogeliste sulgude vahel kasutatakse, defineeritakse väljaspool HTML-i. Uuendades muutuja väärtust, uuendatakse automaatselt ka malli.

Näide:

*app/templates/application.hbs*
```html
Tere hommikust, <strong> </strong>!
```
*app/controllers/application.js*
```javascript
import Controller from '@ember/controller';

export default Controller.extend({
  eesnimi: 'Yehuda',
  perenimi: 'Katz'
});
```


### Mudelid
Mudelid on objektid, mis sisaldavad kasutajaliideses kuvatavaid andmeid. Erinevalt levinud lahendusest laadida ja salvestada mudelid serverisse (ning sealt andmed omakorda andmebaasi), võimaldab Ember mudelid salvestada mällu nii, et serveri hostimine pole vajalik.

Mudeleid on võimalik käsitleda ka läbi Ember Data, mis on Emberi projektide andmete haldamise teek. Küll aga ei ole see projektide puhul kohustuslik element.

### Komponendid
Komponendid kontrollivad kasutajaliidest ja koosnevad kahest osast – Handlebarsi süntaksit kasutades kirjutatud mallist ning JavaScriptis kirjutatud lähtekoodist. Lähtekood määrab komponendi käitumise ehk sisaldab rakenduse funktsionaalsuse tagamiseks vajalikke meetodeid ja atribuute.

Komponendi põhiideeks on muuta märgistuskeel ja kujundus korduvkasutatavaks koodiks.

### ''Hooks''
*Hook*'id on Emberi raamistiku meetodid, mis kutsutakse välja automaatselt programmi käivitudes. *Hook*'id seavad rakenduse tööks valmis kõik eelnevad kihid ehk marsruudid, mallid, mudelid ja komponendid.

## Ember CLI
Ember CLI on ametlik käsurea utiliit (ingl *command line utility*), mis on välja töötatud Emberi rakenduste arendamiseks, haldamiseks ja testimiseks. Ember CLI tagab kasutajale standardse projekti struktuuri, arendamiseks vajalikud tööriistad ja *addon* süsteemi. Selle eesmärgiks on lasta kasutajal keskenduda kohe rakenduse arendamisele, mitte niivõrd rakendust käitava süsteemi seadistamisele.

Ember CLI toetab nii npm-i kui ka yarn-i.

## Viited