Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
richclient:emberjs:router:models [2018/01/18 14:28] – jcheron | richclient:emberjs:router:models [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Route Models ====== | ====== Route Models ====== | ||
+ | |||
+ | ===== Chargement : model hook ===== | ||
+ | |||
+ | |||
Une route est responsable du chargement du ou des models qui seront affichés dans le template associé. | Une route est responsable du chargement du ou des models qui seront affichés dans le template associé. | ||
Ligne 32: | Ligne 36: | ||
{name: ' | {name: ' | ||
]; | ]; | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | La valeur retournée par le model hook de la route est ensuite affectée à la propriété model du controller (implicite ou explicite). Il est ensuite possible d' | ||
+ | <sxh html; | ||
+ | < | ||
+ | {{#each model as |user|}} | ||
+ | < | ||
+ | {{/each}} | ||
+ | </ | ||
+ | |||
+ | ===== Models dynamiques ===== | ||
+ | Le ou les models chargés dépendent parfois des interactions avec l' | ||
+ | |||
+ | Avec Ember, cette fonctionnalité est mise en place avec les [[richclient: | ||
+ | |||
+ | <sxh javascript; | ||
+ | Router.map(function() { | ||
+ | this.route(' | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | <sxh javascript; | ||
+ | import Route from ' | ||
+ | |||
+ | export default Route.extend({ | ||
+ | model(params) { | ||
+ | return this.get(' | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Models multiples ===== | ||
+ | Dans certains cas, la route peut avoir besoin de plusieurs models. | ||
+ | Ember utilise dans ce cas la méthode hash du package RSVP permettant de définir une seule **promise** à partir de plusieurs **promises** existantes : | ||
+ | <sxh javascript; | ||
+ | import Route from ' | ||
+ | import RSVP from ' | ||
+ | |||
+ | export default Route.extend({ | ||
+ | model() { | ||
+ | return RSVP.hash({ | ||
+ | songs: this.get(' | ||
+ | albums: this.get(' | ||
+ | }); | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | ===== Contexte parent ===== | ||
+ | |||
+ | Il arrive qu'une route ne possède pas les paramètres d'url dont elle aurait besoin, en particulier s'il s'agit d'une route enfant. | ||
+ | |||
+ | Il est possible dans ce cas d' | ||
+ | |||
+ | Dans le cas suivant, la route **album/ | ||
+ | <sxh javascript; | ||
+ | import Route from ' | ||
+ | |||
+ | export default Route.extend({ | ||
+ | model() { | ||
+ | let { album_id } = this.paramsFor(' | ||
+ | |||
+ | return this.store.query(' | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
+ | Il est également possible de récupérer le model délivré par une route parent avec la méthode **modelFor** : | ||
+ | <sxh javascript; | ||
+ | import Route from ' | ||
+ | |||
+ | export default Route.extend({ | ||
+ | model() { | ||
+ | let { songs } = this.modelFor(' | ||
+ | |||
+ | return songs; | ||
} | } | ||
}); | }); | ||
</ | </ |