Et si on passait au templating en javascript ?
Mathieu Parisot vous livre ses recettes avec les meilleurs frameworks disponibles.
Conférence réalisée au ParisJS le 27/02/2013
2. Pourquoi ce talk ?
test.js : test.json :
$.ajax({ {
url: 'test.json', name : 'world'
success: function(data) { }
var html = 'hello ' + data.name;
$('#myElem').html(html);
}}):
2013-02-28 Templating JavaScript - doT.js 2
3. Dans la vraie vie
{ {
users: [ lastname:'Dupont',
{ firstname:'Jean',
lastname:'Parisot', address:{
firstname:'Mathieu', street:'4 rue machin',
address:{ zipcode:'75000',
street:'4 rue secrète', city:'Paris'
zipcode:'75000', }
city:'Paris' },
} …
}, ]}
2013-02-28 Templating JavaScript - doT.js 3
4. Et donc on obtient…
var html = '';
for(var i=0;i<data.users.length;i++) {
var user = data.users[i];
html += '<div>Hello <span>';
html += user.lastname + ' ' + user.firstname;
html += '</span></div>';
if(user.address) {
html + '<div>You live in :';
html += '<div>' + user.address.street + '</div>';
html += '<div>' + user.address.zipcode + ' ' + user.address.city + '</div>';
html + '</div>';
}
}
$('#myElem').insert(html);
2013-02-28 Templating JavaScript - doT.js 4
5. Un beau jour…
Good news everyone !
Le JSON a changé !
2013-02-28 Templating JavaScript - doT.js 5
6. En voyant le JavaScript
2013-02-28 Templating JavaScript - doT.js 6
7. 5 minutes plus tard !
2013-02-28 Templating JavaScript - doT.js 7
8. Et si on passait au templating ?
{{#each users}}
<div>
Hello <span>{{lastname}} {{firstname}}</span>
</div>
{{#if address}}
<div>You live in :
<div>{{street}}</div><div>{{zipcode}} {{city}}</div>
</div>
{{/if}}
{{/each}}
2013-02-28 Templating JavaScript - doT.js 8
9. Qu'en pense notre développeur ?
Plus maintenable
J'approuve !
Plus simple
Début de MVC
2013-02-28 Templating JavaScript - doT.js 9
11. Directement dans le JavaScript
var myTemplate = 'Hello {{name}}';
…
var result = applyTemplate(myTemplate, data);
$('#myElem').html(result);
Simple Pas maintenable
Pas réutilisable
2013-02-28 Templating JavaScript - doT.js 11
12. Directement dans le html
<script type="text/template" id="tpl">
Hello {{name}}
</script>
var result = applyTemplate($('#tpl').text(), data);
$('#myElem').html(result);
Simple Pas réutilisable
Maintenable
2013-02-28 Templating JavaScript - doT.js 12
13. Directement un fichier séparé
$.get('template.html', function(template){
var result = applyTemplate(template, data);
$('#myElem').html(result);
});
Maintenable Requête en plus
Réutilisable Asynchrone
2013-02-28 Templating JavaScript - doT.js 13
20. doT.js
http://olado.github.com/doT/
Simple Minimaliste
Concis et léger Peu répandu
Rapide
2013-02-28 Templating JavaScript - doT.js 20
21. La syntaxe
{{~ it.users:u}}
<div>
Hello <span>{{= u.lastname}} {{= u.firstname}}</span>
</div>
{{? address}}
<div>You live in :
<div>{{=street}}</div><div>{{=zipcode}} {{=city}}</div>
</div>
{{?}}
{{~}}
2013-02-28 Templating JavaScript - doT.js 21
22. Un peu de contexte
2013-02-28 Templating JavaScript - doT.js 22
23. Léger
530 lignes de code
15ko non minifié
2200 lignes de code
75ko non minifié
120 lignes de code
5.3ko non minifié
2013-02-28 Templating JavaScript - doT.js 23
24. Benchmarkons
Création d'une liste de 100 éléments
2013-02-28 Templating JavaScript - doT.js 24
37. Un exemple simple
var tplCompile = doT.template('<div>{{=it.txt}}</div>');
var result = tplCompile({txt:'hello world'});
<div>hello world</div>
2013-02-28 Templating JavaScript - doT.js 37
38. La pré-compilation
function anonymous(it) {
var out = '<div>' + (it.txt) + '</div>';
return out;
}
2013-02-28 Templating JavaScript - doT.js 38
39. L'objet it
<div>{{=it.txt}}</div>
function anonymous(it) {
var out = '<div>' + (it.txt) + '</div>';
return out;
}
tplCompile({txt:'hello world'});
2013-02-28 Templating JavaScript - doT.js 39
50. Appel de fonctions
function anonymous(it) {
var out = '<div>'
+ (formatDate(it.creationDate) )
+ '</div>';
return out;
}
2013-02-28 Templating JavaScript - doT.js 50
51. Javascript dans les templates
<div>
{{var toto = 'hello';}}
{{toto += item.maValeur;}}
<span>{{=toto}}</span>
</div>
2013-02-28 Templating JavaScript - doT.js 51
52. Javascript dans les templates
function anonymous(it) {
var out = '<div>';
var toto = 'hello';
toto += it.maValeur;
out += '<span>' + (toto) + '</span></div>';
return out;
}
2013-02-28 Templating JavaScript - doT.js 52
53. LogicLess vs LogicFull
LogicLess LogicFull
⦿ Templates plus ⦿ Plus de liberté
simples ⦿ Plus complexe
⦿ Meilleurs séparation
du code
⦿ Moins de risque de
code brouillon
2013-02-28 Templating JavaScript - doT.js 53