Le bon vieux mail : contact@ccoste.fr
function test() {
alert("Je suis chargée");
};
// Quand la page est chargée...
$(function(){
test();
});
(function($, window, document) { // <= il ressortira par là
function test() {
alert("Je suis chargée");
};
// Quand la page est chargée...
$(function(){
test();
});
})(window.jQuery, window, document); // <= il est entré par ici
$('.main li .content').css('border', '1px solid red');
$('.main li .content').on('click', function(){
$('.main li .content .message').hide();
});
$('.main li .content')
.html('<div class="message">Au revoir</div>');
var content = $('.main li .content');
content
.css('border', '1px solid red');
.on('click', function(){
content.find('.message').hide();
})
.html('Au revoir');
$('li').click(function(){
$(this).closest('ul').addClass('checked');
});
$('ul').on('click', 'li', function(){
$(this).addClass('checked');
});
$(function(){
function affichePage(title) {
$.ajax({
url: "/article/"+title,
type: "get",
success: function(data) {
$(".main .content")
.html(""+data.title+"
");
$("button").click(function(){
affichePage($(".main .content h1").text());
});
}
});
}
affichePage("Helloworld");
});
var title = "Helloworld";
var $el;
function load() {
var request = $.ajax({url: "/article/"+title, type: "get"});
request.done(function(data){title = data.title});
request.done(function(data){
$el.html(""+data.title+"
");
});
}
$(function(){
$el = $(".main .content");
$el.on('click', 'button', load);
load();
});
“Get your truth out of the DOM”
[
{id:'23', titre: 'Les œufs brouillés', statut:'brouillon'},
{id:'24', titre: 'Les œufs à la coque', statut:'publié'}
]
<div>
Les œufs brouillés
Les œufs à la coque
</div>
var Menu = (function() {
function Menu($el) {
this.$el = $el;
}
Menu.prototype.open = function() {
this.$el.show();
}
Menu.prototype.close = function() {
this.$el.hide();
}
return Menu;
})();
var extend = function(child, parent) {
for (var key in parent) {
if (hasProp.call(parent, key)) child[key] = parent[key];
}
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor();
child.__super__ = parent.prototype;
return child;
},
var hasProp = {}.hasOwnProperty;
var MyMenu = (function(superClass) {
extend(MyMenu, superClass);
function MyMenu() {
return MyMenu.__super__.constructor.apply(this, arguments);
}
MyMenu.prototype.open = function() {
return this.$el.show();
};
return MyMenu;
})(Menu);
class MyMenu extends Menu
open: ->
@$el.show()
var Classe = Backbone.Model.extend({});
var objet = {id:'23', title: 'Les œufs brouillés', statut:'publié'}
objet = new Classe(objet);
objet.toJSON(); // -> {id:'23', title: 'Les œufs...
var Classe = Backbone.Model.extend({
default : {
title: 'Mon titre',
statut:'brouillon'
}
});
var objet = new Classe();
var Article = Backbone.Model.extend({
urlRoot: '/articles'
});
var objet = new Article({id: 12});
objet.fetch(); // => GET /articles/12
var objet = new Article();
objet.save(); // => POST /articles
objet.get('id'); // => 1
objet.set({title: 'Machin'});
objet.save() // => PUT /articles/1
objet.destroy(); // => DELETE /articles/1
Chacune de ces fonctions retourne l'objet $.ajax()
en lecture
objet.get('titre');
en écriture
objet.set({statut: 'publié'});
objet1.on(<event>, <method>)
objet2.listenTo(objet1, <event>, <method>)
objet1.trigger(<event>, <arg1>, <arg2>, ...)
objet1.save()
.done(function(){...})
.fail(function(){...});
objet1
.on('sync', function(){})
.on('error', function(){});
objet1.save();
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éussit |
error | Quand une validation ou une sauvegarde échoue |
all | N'importe quel événement |
var Articles = Backbone.Collection.extend({
model: Article
})
var collection = new Articles([
{title:'Lorem', status:'brouillon'},
{title:'Ipsum', status:'publié'}
]);
var Articles = Backbone.Collection.extend({
model: Article,
url: '/articles'
})
var collection = new Articles();
collection.fetch();
articles.forEach(...);
articles.map(...);
articles.find(...);
articles.size();
articles.toArray();
...
add | Quand un objet est ajouté |
remove | Quand un objet est retiré |
J'avais pas de vues
(Oui, c'est nul...)
var el = document.getElementsById('#content');
//$(el) ~= $('#content');
el == $('#content').get(0);
var vue = new Vue({el: '#content'});
vue.el // => équivalent à document.getElementsById('#content')
vue.$el // => équivalent à $('#content')
var Menu = Backbone.View.extend({
events: {
"click button": "cacher",
"mouseover": "afficher"
},
cacher: function(e){
this.$el.children().hide();
},
afficher: function(e){
this.$el.children().show();
}
});
var menu = new Menu({
el: '.menu'
});
var Menu = Backbone.View.extend({
...
tagName: "h3",
className: ".menu",
title: "ceci est un menu"
});
var menu = new Menu();
menu.$el.appendTo('body');
//<body>
// <h3 class="menu" title="ceci est un menu"></h3>
//</body>
var o1 = new Backbone.Model.extend({});
var View = new Backbone.View.extend({
// ...
render: function(){
this.$el.html(""+this.model.get('titre')+"
");
}
});
var v1 = new View({model: o1});
v1.listenTo('o1', 'change', v1.render);
o1.set('titre', 'Lorem ipsum'); // => change:titre
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));
}
});
<h3><%= description %></h3>
<h3>{{ description }}</h3>
%h3= description
<h3><%= description %></h3>
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>)
- backbonejs.org
- marionettejs.com
- Marionette Wires
- Anatomy of Backbone.js sur CodeSchool