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:08] – [Balise principale] 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 158: | Ligne 158: | ||
==== Personnalisation de la classe css ==== | ==== Personnalisation de la classe css ==== | ||
- | |||
- | You can specify the class of a component' | ||
La classe appliquée au composant qui sera généré peut être définie à son invocation, en tant qu' | La classe appliquée au composant qui sera généré peut être définie à son invocation, en tant qu' | ||
Ligne 166: | Ligne 164: | ||
{{navigation-bar class=" | {{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(' | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
+ |