Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Construindo aplicações web com Backbone e Node.js

Construindo aplicações web com Backbone e Node.js

Palestra apresentada no RSJS 2013 (http://rsjs.org)

Ricardo Tomasi

March 26, 2013
Tweet

More Decks by Ricardo Tomasi

Other Decks in Programming

Transcript

  1. NODE.JS BACKBONE + + event emitters + mvc + HTML5

    + LESS + COFFEESCRIPT + EXPRESS + CHAOS THEORY + IMPOSTO DE RENDA + CERVEJA ARTESANAL
  2. var Conference = _.extend({ initialize: function(){ console.log('New conference!') }, defaults:

    { name: 'Default title', year: 2013, city: 'São Paulo' } }, Backbone.Model) MODEL
  3. // Criando uma nova conferência var RSJS = new Conference({

    name: 'RSJS', year: 2013, city: 'Porto Alegre' }) // year === 2013 var year = RSJS.get('year') MODEL
  4. var Conference = Backbone.Model.extend({ ... urlRoot: '/conferences' }) RSJS.save() ->

    $.post('/conferences', { name: 'RSJS'... }) RSJS.id // => 1 MODEL
  5. -> $.ajax({ url: '/conferences/1' , method: 'PUT' , data: {

    year: 3000, ... } ... }) RSJS.set({ year: 3000 }) RSJS.save() MODEL
  6. MODEL // carregar dados do server RSJS.fetch() // sends an

    HTTP delete to / conferences/1 RSJS.destroy() // retorna todos os atributos RSJS.toJSON() eventos: 'change', 'change:attr', 'sync', 'error', 'destroy' ...
  7. var ConferenceView = Backbone.View.extend({ tagName: 'div', className: 'conference', render: function

    () { var name = this.model.get('name'), description = this.model.get('description') this.el.append( $('<h2>').addClass('title').text(name), $('<p>').text(description) ) } }) VIEW
  8. // Nova view usando o model RSJS var view =

    new ConferenceView({ model: RSJS }) VIEW
  9. VIEW var ConferenceView = Backbone.View.extend({ ... initialize: function (options){ this.model

    = new Conference({ id: options.id }) this.model.fetch() this.model.on('sync', this.render) } render: function () { // render template } }) var view = new ConferenceView({ id: 123 })
  10. VIEW var ConferenceView = Backbone.View.extend({ initialize: function (options) { this.model.on('change',

    this.render) }, events: { 'click .subscribe': 'subscribe' }, subscribe: function(){ this.model.set('subscribed', true) } })
  11. COLLECTION // instancia o Model automaticamente Calendar.add({ name: 'RSJS', year:

    2012 }) Calendar.add(RSJS) Calendar.add(new Conference({ name: 'RSJS', year: 2013 }))
  12. ROUTER var CalendarRouter = Backbone.Router.extend({ routes: { "event/:id": "event", //

    #event/123 "*path": "eventList" // catch-all }, event: function() { // render event view }, eventList: function(query, page) { // render event list } })
  13. NODE + BACKBONE var express = require('express') , app =

    express() , db = new ImaginaryDB('127.0.0.1', 'root', '123456') app.configure -> ... app.use express.bodyParser() app.use app.router app.get('/', function (req, res) { res.render('index') })
  14. NODE + BACKBONE app.get('/events', function(req, res) { db.getAll(function(err, events){ res.json(events)

    }) }) var events = new CalendarCollection() events.url = '/events' events.fetch()
  15. NODE + BACKBONE app.get('/event/:id', function(req, res) { db.getById(req.params.id, function(err, event){

    res.json(event) }) }) var RSJS = new Conference({ id: 123 }) RSJS.fetch()
  16. NODE + BACKBONE app.post('/event', function(req, res){ var event = new

    db.Event(req.body) db.put(event, function(err, res){ res.json(res) }) }) var RSJS = new Conference({ name: 'RSJS', year: 2013 }) RSJS.save()