{id:'23', titre: 'Les œufs brouillés', status:'brouillon'}
Les œufs brouillés
“Get your truth out of the DOM”
var RecetteItem = Backbone.Model.extend({});
var recetteItem = = new RecetteItem(
{id:'23', title: 'Les œufs brouillés', status:'publié'}
);
Accesseur en lecture
recette.get('titre');
Accesseur en écriture
recette.set({status: 'publié'});
Synchronisation serveur
recette.save();
var RecetteView = Backbone.View.extend({
render: function(){
var html = '' + this.model.get('titre') + '
';
$(this.el).html(html); // ou alors: this.$el.html(html)
}
});
var recetteView = new RecetteView({
model: recetteItem
});
recetteView.render();
console.log(recetteView.el);
Les œufs brouillés
var RecetteItem = Backbone.Model.extend({
urlRoot: '/recettes'
});
Chargement de la recette avec id=1
var recetteItem = new RecetteItem({id: 1});
recetteItem.fetch();
// --> GET /recettes/1
Mise à jour de la recette
recetteItem.set({titre: 'Les œufs mollets'});
recetteItem.save();
// --> PUT /recette/1
var recetteItem = new RecetteItem();
recetteItem.set({titre: 'Les œufs pochés'});
recetteItem.get('id');
// --> ''
recetteItem.save();
// --> POST /recettes
recetteItem.get('id');
// --> 24
recetteItem.destroy();
// --> DELETE /recettes/24
Modèle vers JSON
recetteItem.toJSON();
// --> {id:'24', titre:'Les œufs pochés', status: null}
var RecetteItem = Backbone.Model.extend({
defaults: {
titre: 'Nouvelle recette',
status: 'brouillon'
}
});
var recetteItem = new RecetteItem();
recetteItem.get('titre'); // --> 'Nouvelle recette'
recetteItem.get('status'); // --> 'brouillon'
recetteItem.on('evenement', function(){
alert('événement déclenché');
});
recetteItem.trigger('evenement');
recetteItem.on(<event>,<method>)
change | Quand un attribut est modifié |
change:<attr> | Quand <attr> est modifié |
destroy | Quand un modèle est détruit |
sync | Quand une synchronisation réussie |
error | Quand une validation ou une sauvegarde échoue |
all | N'importe quel événement |
var RecetteView = Backbone.View.extend({});
var recetteItem = new RecetteView();
console.log(recetteItem.el);
// -->
var RecetteView = Backbone.View.extend({
tagName: 'h3',
id: 'recette-node',
className: 'highlight'
});
var recetteItem = new RecetteView();
console.log(recetteItem.el);
// -->
jQuery courant
$('#recette-node').html()
`el` est un élément DOM
$(recetteView.el).html()
Version avec alias
recette.$el.html()
(l'ID peut changer, le `$el` reste)
var RecetteView = Backbone.View.extend({
tagName: 'h3',
className: 'highlight',
id: 'recette-node',
render: function(){
this.$el.html(this.model.get('titre'));
}
});
var recetteView = new RecetteView({model: recetteItem});
recetteView.render();
console.log(recetteView.el);
// --> Les œufs pochés
var RecetteView = Backbone.View.extend({
// ...
template: _.template('<%= titre %>') // moteur de underscore.js
render: function(){
var attributes = this.model.toJSON();
this.$el.html(this.template(attributes));
}
});
<%= description %>
{{ description }}
%h3= description
<%= description %>
Avant
function alertClick(e){
alert("Un click a eu lieu!");
}
$('h3').click(alertClick); // s'applique sur tous les h3
Avec Backbone
var RecetteView = Backbone.View.extend({
events: {
'click h3': 'alertClick' // restreint aux descendants de `el`
},
alertClick: function(e){
alert("Un click a eu lieu!");
}
});
Dans les coulisses...
this.$el.on(<event>, <selector>, <callback>)
var DocumentView = Backbone.View.extend({
events: {
"dblclick" : "open",
"click .icon.doc" : "select",
"mouseover .title .date" : "showTooltip",
...
}
...
});
- backbonejs.org
- marionettejs.com
- Marionette Wires
- Anatomy of Backbone.js sur CodeSchool