Backbone.View
new Backbone.View()
el $el var v = new Backbone.View(); v.el; v.$el
Backbone.View.extend({ })
var MovieView = Backbone.View.extend({ })
var MovieView = Backbone.View.extend({ render: function(){ this.$el.append( '<button>Click me</button>') } })
var MovieView = Backbone.View.extend({ render: function(){ this.$el.append( '<button>Click me</button>') } }); var movieView = new MovieView(); movieView.render();
tagName className attributes var ListItemView = Backbone.View.extend({ tagName: 'li' });
$el.appendTo( document.body )
DOM Events
Backbone.View.extend({ events: { "click .close": "remove" } });
Backbone.Model
new Backbone.Model()
var m = new Backbone.Model( { title: "Deadpool", year: 2016 } ); m.get("title"); m.toJSON(); // to javascript object m.set({ description: "A former Special Forces..." })
var Movie = Backbone.Model.extend({ defaults: { title: "", year: 0 } }); var m = new Movie( { title: "Deadpool", year: 2016 } );
var Movie = Backbone.Model.extend({ defaults: { title: "", year: 0, likes: 0 }, like: function(){ this.set({ likes: this.get('likes') + 1 }); } }); var m = new Movie( { title: "Deadpool", year: 2016 } );
m.like(); m.like(); m.get('likes');
var m = new Backbone.Model({ title: "Batman" }); var v = new Backbone.View({ model: m }); v.model.get('title');
var Movie = Backbone.Model.extend(); var MovieView = Backbone.View.extend({ render: function(){ this.$el.html('<h1>'+this.model.get('title')+'</h1>'); return this; } }); var m = new Movie({ title: "Batman" }); var v = new MovieView({ model: m }); v.render().$el.appendTo( document.body );
_.template();
var template = _.template('<h1><%=title%></h1>'); var html = this.template({ title: 'Zootopia' }); // html: <h1>Zootopia</h1>
var Movie = Backbone.Model.extend(); var MovieView = Backbone.View.extend({ template: _.template('<h1><%=title%></h1>'), render: function(){ var html = this.template( this.model.toJSON() ); this.$el.html( html ); return this; } }); var m = new Movie({ title: "Batman" }); var v = new MovieView({ model: m }); v.render().$el.appendTo( document.body );
var m = new Backbone.Model(); m.on('change', function(m){ console.log( m.toJSON() ); }) m.set({ likes: 1 });
var MovieView = Backbone.View.extend({ initialize: function(){ this.listenTo( this.model, 'change', this.render); } });
var MovieView = Backbone.View.extend({ initialize: function(){ this.listenTo( this.model, 'change:likes', this.updateLikes); }, updateLikes: function(){ this.$('.likes').text( this.model.get('likes') ); } });
var coll = new Backbone.Collection([ { title: "Deadpool" }, { title: "Batman" } ]); coll.add({ title: "Captain America"}); var m = coll.findWhere({ title: "Deadpool" }); console.log('FOUND', m.get('title')); coll.remove( m ); coll.each(function(m){ console.log( 'EACH', m.get('title') ); });
var Movie = Backbone.Model.extend({}); var Movies = Backbone.Collection.extend({ model: Movie }); var movies = new Movies(); movies.each(function(m){ var v = new MovieView({ model: m }); v.render().$el.appendTo( document.body ); });
Custom headers:
Access-Control-Allow-Origin: *
var Posts = Backbone.Collection.extend({ url: "http://jsonplaceholder.typicode.com/posts", model: Post }); var posts = new Posts(); posts.fetch().done(function(){ posts.each(function(m){ var v = new PostView({ model: m }); v.render().$el.appendTo( document.body ); }); });
var Router = Backbone.Router.extend({ routes: { "help": "help", "post/:id": "post" }, help: function(){ console.log( 'help' ); }, post: function(id){ console.log( 'post', id ); } }); $(function(){ var router = new Router(); Backbone.history.start(); // router.navigate('help'); });