Dans le tutoriel précédent, j’ai montré comment configurer les parties serveur et client de Discourse pour répondre à une requête.
Nous vous recommandons désormais de lire la documentation des composants Ember : Introducing Components - Components - Ember Guides
Avant d’écrire un composant, consultez le kit UI de composants, d’aides et de modificateurs partagés ; la plupart des contrôles courants y sont déjà disponibles.
Ancien tutoriel
Dans ce tutoriel, je vais créer un nouveau composant Ember comme moyen d’encapsuler du JavaScript tiers. Cela ressemblera à une vidéo YouTube que j’ai réalisée il y a un moment, qui peut s’avérer informative, sauf que cette fois-ci, elle est spécifique à Discourse et à la manière dont nous organisons les fichiers dans notre projet.
Pourquoi des composants ?
Handlebars est un langage assez simple et séduisant. Il s’agit simplement de HTML régulier avec quelques parties dynamiques. C’est facile à apprendre et excellent pour la productivité, mais moins adapté à la réutilisation du code. Si vous développez une grande application comme Discourse, vous constaterez que vous souhaitez réutiliser certaines choses encore et encore.
Les composants sont la solution d’Ember à ce problème. Créons un composant qui affichera notre collation de manière plus élégante.
Création d’un nouveau composant
Les composants doivent contenir un tiret dans leur nom. Je vais choisir fancy-snack comme nom pour celui-ci. Créons notre gabarit :
app/assets/javascripts/admin/templates/components/fancy-snack.hbs
<div class="fancy-snack-title">
<h1>{{snack.name}}</h1>
</div>
<div class="fancy-snack-description">
<p>{{snack.description}}</p>
</div>
Maintenant, pour utiliser notre composant, nous allons remplacer notre gabarit existant admin/snack par ceci :
app/assets/javascripts/admin/templates/snack.hbs
{{fancy-snack snack=model}}
Nous pouvons désormais réutiliser notre composant fancy-snack dans n’importe quel autre gabarit, en passant simplement le modèle requis.
Ajout de code JavaScript personnalisé
En plus de la réutilisabilité, les composants d’Ember sont excellents pour ajouter en toute sécurité du JavaScript personnalisé, du jQuery et d’autres codes externes. Ils vous donnent le contrôle sur le moment où le composant est inséré dans la page et sur le moment où il est supprimé. Pour ce faire, nous définissons un Ember.Component avec du code :
app/assets/javascripts/admin/components/fancy-snack.js
export default Ember.Component.extend({
didInsertElement() {
this._super();
this.$().animate({ backgroundColor: "yellow" }, 2000);
},
willDestroyElement() {
this._super();
this.$().stop();
},
});
Si vous ajoutez le code ci-dessus et rechargez la page, vous verrez que notre collation a une animation avec un fond jaune qui s’estompe lentement.
Expliquons ce qui se passe ici :
-
Lorsque le composant est rendu sur la page, il appelle
didInsertElement -
La première ligne de
didInsertElement(et dewillDestroyElement) estthis._super(), ce qui est nécessaire car nous sous-classons Ember.Component. -
L’animation est effectuée à l’aide de la fonction animate de jQuery.
-
Enfin, l’animation est annulée dans le crochet
willDestroyElement, qui est appelé lorsque le composant est supprimé de la page.
Vous vous demandez peut-être pourquoi nous nous soucions de willDestroyElement ; la raison est que dans une application JavaScript de longue durée comme Discourse, il est important de nettoyer après soi, afin d’éviter de fuiter de la mémoire ou de laisser des processus en cours. Dans ce cas, nous arrêtons l’animation, ce qui indique aux minuteries jQuery qu’elles n’ont plus besoin de se déclencher puisque le composant n’est plus visible sur la page.
Où aller à partir d’ici
Le tutoriel final de cette série couvre les tests automatisés.
Ce document est versionné - suggérez des modifications sur github.