Si vous n'êtes pas familier avec le concept du data binding, préparez-vous à être soufflés !
En quelques mots, le data binding est un moyen de lier une interface et des données, de sorte à ce que si les données changent, l'interface change pour refletter les nouvelles données.
Ce n'est pas clair ? Essayons avec un exemple.
Notre JS
var data = {
title: "Panier de fruits",
fruits: ["pomme", "poire"],
}
Notre HTML
<h1>Panier de fruits</h1>
<ul>
<li>pomme</li>
<li>poire</li>
</ul>
Si nous lions notre HTML à notre JS, et que nous ajoutons un objet "coing" au tableau de fruits, un nouveau "<li>" va se créer pour refletter ce changement !
De même, modifier la chaine de titre changera le contenu du H1.
Magique ? Pas loin, oui ! La quantité de travail que nous pouvons economiser grace à ce genre de library est vraiment impressionnante.
Quand le marche est dominé par des monstres comme Ember js ou Angular, pourquoi faire le choix de Rivets, library bien plus modeste ? Pour la rapidité de mise en place et d'apprentissage.
Un des plus gros problèmes des frameworks complets comme Angular, justement, est le temps nécessaire pour acquérir les bases. Gestion des scopes, modèles, modules, les concepts à prendre en main sont très vastes et pas des plus simples. Rivets, lui, ne fait qu'une chose : du data binding. Et le moins que l'on puisse dire est qu'il le fait bien.
Reprenons l'exemple précédent avec Rivets. Si vous voulez l'essayer, copiez collez le dans un fichier HTML.
<div id="view">
<h1>{ data.title }</h1>
<ul>
<li rv-each-fruit="data.fruits" >{ fruit }</li>
</ul>
</div>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://raw.githubusercontent.com/mikeric/rivets/v0.7.1/dist/rivets.bundled.min.js"></script>
<script>
var data = {
title: "Panier de fruits",
fruits: ["pomme", "poire"],
}
rivets.bind($('#view'), {data: data})
</script>
Et c'est tout. Changez les données de l'objet "data" (depuis l'outil de développement de votre navigateur par exemple), et votre HTML changera tout seul.
Pour plus d'informations, je vous conseille la documentation.