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:components [2018/01/26 03:04] – [Contenu] jcheron | richclient:emberjs:components [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 27: | Ligne 27: | ||
| <sxh html; | <sxh html; | ||
| {{#each model as |post|}} | {{#each model as |post|}} | ||
| - | {{blog-post title=post.title}} | + | {{#blog-post title=post.title}} |
| {{post.body}} | {{post.body}} | ||
| {{/ | {{/ | ||
| Ligne 156: | Ligne 156: | ||
| </ul> | </ul> | ||
| </ | </ | ||
| + | |||
| + | ==== Personnalisation de la classe css ==== | ||
| + | |||
| + | La classe appliquée au composant qui sera généré peut être définie à son invocation, en tant qu' | ||
| + | |||
| + | <sxh html> | ||
| + | {{navigation-bar class=" | ||
| + | </ | ||
| + | |||
| + | Il est également possible de déterminer quelle classe css sera appliquée à un composant en affectant à sa propriété **classNames** un tableau de strings. | ||
| + | |||
| + | <sxh javascript> | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | classNames: [' | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Il est également possible de déterminer la classe css à partir des propriétés du composant en utilisant **classNameBindings**. | ||
| + | |||
| + | Si une propriété booléenne est utilisée, la classe sera présente ou absente en fonction de la valeur de la propriété (false ou true) : | ||
| + | |||
| + | |||
| + | <sxh javascript> | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | classNameBindings: | ||
| + | isUrgent: true | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | **classNameBindings** peut également porter une condition (si/ | ||
| + | <sxh javascript> | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | classNameBindings: | ||
| + | isEnabled: false | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | ==== Personnalisation des attributs HTML ==== | ||
| + | |||
| + | La propriété **attributeBindings** permet de définir les attributs du DOM associés au HTML généré : | ||
| + | <sxh javascript> | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | tagName: ' | ||
| + | attributeBindings: | ||
| + | |||
| + | href: ' | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Il est possible de définir **attributeBindings** à partir d'une propriété du composant : | ||
| + | <sxh javascript> | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | tagName: ' | ||
| + | attributeBindings: | ||
| + | |||
| + | customHref: ' | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | ===== Gestion des événements ===== | ||
| + | |||
| + | |||
| + | <sxh html; | ||
| + | {{# | ||
| + | This is a double clickable area! | ||
| + | {{/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | Ajout de la prise en charge de l' | ||
| + | <sxh javascript; | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | doubleClick() { | ||
| + | alert(" | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | |||
| + | Pour autoriser la propagation de l' | ||
| + | <sxh javascript; | ||
| + | import Component from ' | ||
| + | |||
| + | export default Component.extend({ | ||
| + | doubleClick() { | ||
| + | alert(" | ||
| + | return true; | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Voir la liste des [[https:// | ||
| + | |||
| + | ===== Actions ===== | ||
| + | |||
| + | Création d'un composant appelant l' | ||
| + | |||
| + | Générer le composant : | ||
| + | |||
| + | <sxh bash; | ||
| + | ember generate component action-button | ||
| + | </ | ||
| + | |||
| + | |||
| + | Implémenter le template du composant **action-button** : | ||
| + | |||
| + | <sxh html; | ||
| + | <button {{action " | ||
| + | </ | ||
| + | |||
| + | Le template invoque l' | ||
| + | |||
| + | <sxh javascript; | ||
| + | import Ember from ' | ||
| + | |||
| + | export default Ember.Component.extend({ | ||
| + | actions: { | ||
| + | doButtonThing() { | ||
| + | this.sendAction(' | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | |||
| + | Le composant peut maintenant être utilisé dans une route /test : | ||
| + | |||
| + | <sxh html; | ||
| + | {{# | ||
| + | </ | ||
| + | |||
| + | |||
| + | l' | ||
| + | |||
| + | <sxh javascript; | ||
| + | import Route from ' | ||
| + | |||
| + | export default Route.extend({ | ||
| + | actions: { | ||
| + | continue() { | ||
| + | console.log(" | ||
| + | this.replaceWith(' | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||