**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*

```
Tere hommikust, <strong>{{eesnimi}} {{perenimi}}</strong>!

```
*app/controllers/application.js*

```
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 jooksutava süsteemi seadistamisele.

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

Viited
------

1. ↑  Ember.js. Ember.js Release Cycle. *emberjs.com*. Kasutatud 03.11.2018.
2. ↑  Ember licence. *github.com/emberjs*. Kasutatud 03.11.2018.
3. ↑  Sourav Lahoti, Robert Nyman. Ember.JS – What it is and why we need to care about it. *hacks.mozilla.org*. Kasutatud 03.11.2018.
4. ↑  Ember.js. https://www.emberjs.com/ember-users/. *emberjs.com*. Kasutatud 03.11.2018.
5. ↑  Blimp. Ambitious web applications built using Ember.js. *builtwithember.io*. Kasutatud 03.11.2018.
6. ↑  Ember Igniter. 5 Essential Ember Concepts You Must Understand. *emberigniter.com*. Kasutatud 03.11.2018.
7. 1 2 3  Ember.js. Core Concepts. *guides.emberjs.com*. Kasutatud 03.11.2018.
8. 1 2  Ember.js. Handlebars Basics. *guides.emberjs.com*. Kasutatud 03.11.2018.
9. ↑  Ember.js. Bindings. *guides.emberjs.com*. Kasutatud 28.11.2018.
10. 1 2  What are Ember Data models?. *guides.emberjs.com*. Kasutatud 03.11.2018.
11. ↑  Ember.js. Defining a Component. *guides.emberjs.com*. Kasutatud 03.11.2018.
12. 1 2  Overview of Ember CLI. *ember-cli.com*. Kasutatud 03.11.2018.