SlideShare una empresa de Scribd logo
1 de 35
Backbone.js nas trincheiras
Giovanni Bassi
giovanni@lambda3.com.br
@giovannibassi
Osmar Landin
osmar.landin@lambda3.com.br
@osmarlandin
Agenda
O que é
BackboneJS
Porque
BackboneJS e
cenários
Estruturando o
projeto
Usando o
BackboneJS
Testando o
BackboneJS
Conclusões
O que é Backbone.js
Backbone.js
• Componente Javascript
– Pode ser usado com CoffeeScript ou TypeScript
• MV* - Separação de responsabilidades entre modelo,
view, e roteador (mais ou menos um MVC)
• Um dos frameworks JS mais usados no mundo
• Bem documentado
• Open source (hospedado no github)
Porque Backbone.js?
Características do cenário
BackboneJS x <algum server>
• Prós
– Maior responsividade da aplicação
– Mais cara de aplicação, menos cara de site
– Código de interface concentrado mais perto do navegador
– Interfaces mais ricas
• Contras
– Ferramental ainda em evolução
– Curva de aprendizado
– Hoje ainda é mais lento para desenvolver
Cenário
• Maior responsividade da aplicação
• Testabilidade
• Documentação dos componentes
• Estabilidade dos componentes
• Rodar na internet e na intranet
• Navegadores modernos
• Milhares de usuários
Estruturando o projeto
Separação da IG e comportamento
• Uso do Backbone.js e Mustache.js, depois substituído
por Handlebars (uma extensão do Mustache)
• Backbone.js provê a ideia de views e templates,
facilitando a manipulação da view
View
define [
'Backbone'
'Handlebars'
'text!views/templates/AppViewTemplate.html'
],
(Backbone, Handlebars, Template) ->
class AppView extends Backbone.View
template: Template
render: ->
@$el.html Handlebars.compile(@template)
Template
<section id="eventosApp">
<header>Eventos</header>
</section>
Consumidor da view
require [
'views/AppView'
],
(AppView) ->
appView = new AppView
el:$("#app-container")
appView.render()
Separação do código da app e das bibliotecas
• Uso de RequireJS para modularização (usando AMD)
• Separação das pastas da aplicação entre:
– Bibliotecas
– Aplicação
– Testes
Estrutura de diretórios
• Aplicação
– Scripts (bibliotecas)
– App (código da aplicação)
• Models
• Views
– Templates
• Router
– AppTestes
• Models
• Views
RequireJS (html)
<!DOCTYPE html>
<html>
<head>
<script data-main="App/bootstrap.js" src="Scripts/require.js"></script>
</head>
<body>
<section id="app-container"></section>
</body>
</html>
RequireJS (Bootstrap)
require.config
paths:
jquery: '../Scripts/jquery-1.9.1'
jQueryUI: '../Scripts/jquery-ui-1.10.0'
Underscore: '../Scripts/underscore'
Backbone: '../Scripts/backbone'
Handlebars: '../Scripts/handlebars'
TwitterBootstrap: '../Scripts/bootstrap'
text: '../Scripts/text'
shim:
'jQueryUI':
deps: ['jquery']
'Handlebars':
deps: ['jquery']
exports: 'Handlebars'
RequireJS (módulo)
define [
'Backbone'
'Handlebars'
],
(Backbone, Handlebars) ->
Aprofundando no
Backbone.js
Backbone.js não existe sozinho
• Dependência direta do Underscore (ou Lo-Dash)
• Para manipulação da view utiliza jQuery (ou Zepto)
– Recomendamos também o Handlebars para templates
Roteadores (Backbone.Router)
• Intercepta as urls e encaminha para um método
• Cuida do histórico (back, forward, etc)
• Geralmente só há um roteador na app (grande
potencial para problemas se você ignorar essa regra)
• Pode ficar bem grande
• Geralmente passa o controle para alguma view
http://localhost/#novo
define ['jquery‘, 'Backbone‘, 'views/AppView‘,
'views/ListaEventosView‘,'views/CadastroEventoView'],
($, Backbone, AppView, ListaEventosView, CadastroEventoView) ->
class router extends Backbone.Router
routes:
'':'home'
'novo':'criarEvento'
initialize: ->
appView = new AppView
el:$("#app-container")
appView.render()
Backbone.history.start()
home: ->
listaEventosView = new ListaEventosView { el:$("#app-content") }
listaEventosView.render()
criarEvento: ->
cadastroView = new CadastroEventoView
el:$("#app-content")
cadastroView.render()
Views
• Não é bem uma view, é mais ou menos um controller
• Em geral busca os dados em algum model ou
collection, e renderiza o html (com um template ou
não)
• Intercepta os eventos do html e se comunica com o
model ou collection, que por sua vez, falam com o
servidor
View
define ['jquery','Backbone','Handlebars','models/EventosCollection',
'views/ListaEventosItemView','text!views/templates/ListaEventosViewTemplate.html'],
($, Backbone, Handlebars, EventosCollection, ListaEventosItemView, Template) ->
class ListaEventosView extends Backbone.View
template: Template
events: -> 'click #incluir-evento':'criarEvento'
initialize: (options) ->
@el = options.el
@collection = new EventosCollection()
render: ->
@$el.empty()
@$el.html Handlebars.compile @template
@collection.fetch success: => @renderizarEventos()
renderizarEventos: ->
@collection.each (item) =>
itemView = new ListaEventosItemView {el:$("#listaEventos tbody"), model:item}
itemView.render()
criarEvento: -> window.location ='#novo'
Template
<tr>
<td>{{Id}}</td>
<td>{{Nome}}</td>
<td>{{{formataData Data}}}</td>
<td>{{QuantidadeVagas}}</td>
</tr>
Modelos (Backbone.Model)
• Representam o modelo de negócio, e também os
dados a serem exibidos/editados
• Tem conexão direta com o servidor, um modelo sabe
se recuperar no server
• Representam uma única entidade
Model
define [
'Backbone'
],
(Backbone) ->
class EventoModel extends Backbone.Model
idAttribute: "Id"
urlRoot:"api/eventos"
Coleções (Backbone.Collection)
• Representam uma coleção de entidades do modelo
• Permitem obter diversas entidades de uma única vez,
com ou sem filtros na consulta
• Permite criar, excluir, atualizar entidades
Collection
define [
'Backbone'
'models/EventoModel'
],
(Backbone, EventoModel) ->
class BackboneCollection extends Backbone.Collection
url: '/api/eventos'
model: EventoModel
Testando
Backbone é bastante testável
• Testes de unidade com diversos frameworks possíveis,
como QUnit, Jasmine e outros (usamos Jasmine com
Jasmine-JQuery)
• Os testes não batem no server, não há necessidade de
rodar o lado do servidor para os testes passarem
• Faça testes de unidade!
• Faça também testes de integração dirigindo o browser
Testando a renderização da view
define ['views/ListaEventosItemView'], (ListaEventosItemView) ->
element = $("<div></div>")
subject = null
model = new Backbone.Model()
model.set
"Id":7
"Nome":"Evento 1"
"Data":"2013-03-14T12:56:59.0934901-03:00"
"QuantidadeVagas":100
describe 'Lista Eventos Item View', ->
beforeEach ->
subject = new ListaEventosItemView { el:element, model:model }
describe 'Ao renderizar', ->
beforeEach ->
subject.render()
it 'deve exibir o id do evento', ->
expect(subject.$el.html()).toContain('7')
it 'deve exibir o nome do evento', ->
expect(subject.$el.html()).toContain('Evento 1')
it 'deve exibir a data do evento já formatada', ->
expect(subject.$el.html()).toContain('3/14/2013')
Mockando Ajax
describe 'Ao salvar o modelo com sucesso', ->
beforeEach ->
spyOn($, "ajax").andCallFake (parametros) ->
parametros.success
Id:1
Nome:"Evento 1"
Data:"2013-03-14T12:56:59.0934901-03:00"
QuantidadeVagas:100
it 'deve redirecionar para a listagem de eventos', ->
$("#salvar", subject.el).click()
expect(subject.exibirLista).toHaveBeenCalled()
Dúvidas?
Giovanni Bassi
giovanni@lambda3.com.br
@giovannibassi
Osmar Landin
osmar.landin@lambda3.com.br
@osmarlandin
Obrigado!
Giovanni Bassi
giovanni@lambda3.com.br
@giovannibassi
Osmar Landin
osmar.landin@lambda3.com.br
@osmarlandin
www.lambda3.com.br

Más contenido relacionado

La actualidad más candente

jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroEduardo Shiota Yasuda
 
Devrs net juntaai
Devrs net juntaaiDevrs net juntaai
Devrs net juntaaiTiago Totti
 
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaAlém do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaCharles Kilesse
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSRomulo Fagundes
 
Desafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerceDesafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerceEduardo Shiota Yasuda
 
Descomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkDescomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkPablo Garrido
 
Meu primeiro tema de WordPress
Meu primeiro tema de WordPressMeu primeiro tema de WordPress
Meu primeiro tema de WordPressLuan Muniz
 
Minicurso Testando RESTful Web Services
Minicurso Testando RESTful Web ServicesMinicurso Testando RESTful Web Services
Minicurso Testando RESTful Web ServicesCharles Kilesse
 
O processo de criação de um web site | By Alessandra Soares
O processo de criação de um web site | By Alessandra SoaresO processo de criação de um web site | By Alessandra Soares
O processo de criação de um web site | By Alessandra SoaresProdv Comunicação
 
IBM - Apresentando jQuery
IBM - Apresentando jQueryIBM - Apresentando jQuery
IBM - Apresentando jQueryAlberto Leal
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJSRodrigo Branas
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 

La actualidad más candente (20)

Javascript + jQuery
Javascript + jQueryJavascript + jQuery
Javascript + jQuery
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
JQuery
JQueryJQuery
JQuery
 
Web 3.0
Web 3.0Web 3.0
Web 3.0
 
CSS & JQquery
CSS & JQqueryCSS & JQquery
CSS & JQquery
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
 
Devrs net juntaai
Devrs net juntaaiDevrs net juntaai
Devrs net juntaai
 
Plugin zend acl
Plugin zend aclPlugin zend acl
Plugin zend acl
 
Além do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completaAlém do Webdriver e Page Objects - Versão completa
Além do Webdriver e Page Objects - Versão completa
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
 
Desafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerceDesafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerce
 
Descomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao FrameworkDescomplicando o JQuery - Introdução ao Framework
Descomplicando o JQuery - Introdução ao Framework
 
Meu primeiro tema de WordPress
Meu primeiro tema de WordPressMeu primeiro tema de WordPress
Meu primeiro tema de WordPress
 
Minicurso Testando RESTful Web Services
Minicurso Testando RESTful Web ServicesMinicurso Testando RESTful Web Services
Minicurso Testando RESTful Web Services
 
O processo de criação de um web site | By Alessandra Soares
O processo de criação de um web site | By Alessandra SoaresO processo de criação de um web site | By Alessandra Soares
O processo de criação de um web site | By Alessandra Soares
 
IBM - Apresentando jQuery
IBM - Apresentando jQueryIBM - Apresentando jQuery
IBM - Apresentando jQuery
 
Jquery Mobile
Jquery MobileJquery Mobile
Jquery Mobile
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 

Destacado

99年新生訓練訓導簡報
99年新生訓練訓導簡報99年新生訓練訓導簡報
99年新生訓練訓導簡報wtzung
 
Getting the most out of Test Automation
Getting the most out of Test AutomationGetting the most out of Test Automation
Getting the most out of Test AutomationChris Lawn
 
Bling v Bang BLC12
Bling v Bang BLC12Bling v Bang BLC12
Bling v Bang BLC12Shelley Paul
 
Using lab exams to ensure programming practice in an introductory programming...
Using lab exams to ensure programming practice in an introductory programming...Using lab exams to ensure programming practice in an introductory programming...
Using lab exams to ensure programming practice in an introductory programming...Luis Estevens
 
UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10
UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10
UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10Sudhir Aggarwal
 
Adnavi ulfa 111301630016
Adnavi ulfa 111301630016Adnavi ulfa 111301630016
Adnavi ulfa 111301630016adnavi
 
Marketing de Produtos Digitais
Marketing de Produtos DigitaisMarketing de Produtos Digitais
Marketing de Produtos DigitaisLambda 3
 
Lks iodometri jadi
Lks iodometri jadiLks iodometri jadi
Lks iodometri jadiEdi Haryanta
 
Ecolalia mayra
Ecolalia mayraEcolalia mayra
Ecolalia mayramaybita
 
Intro con interp.j430.f2016
Intro con interp.j430.f2016Intro con interp.j430.f2016
Intro con interp.j430.f2016Michael Park
 
ردا على علي جمعة : الألباني، جهاده، حياته
ردا على علي جمعة : الألباني، جهاده، حياتهردا على علي جمعة : الألباني، جهاده، حياته
ردا على علي جمعة : الألباني، جهاده، حياتهOm Muktar
 
Halloween o noche de brujas[1]
Halloween o noche de brujas[1]Halloween o noche de brujas[1]
Halloween o noche de brujas[1]becarjuing
 

Destacado (17)

99年新生訓練訓導簡報
99年新生訓練訓導簡報99年新生訓練訓導簡報
99年新生訓練訓導簡報
 
Season of Thanks
Season of ThanksSeason of Thanks
Season of Thanks
 
Roofers Ayr
Roofers AyrRoofers Ayr
Roofers Ayr
 
Getting the most out of Test Automation
Getting the most out of Test AutomationGetting the most out of Test Automation
Getting the most out of Test Automation
 
Bling v Bang BLC12
Bling v Bang BLC12Bling v Bang BLC12
Bling v Bang BLC12
 
Using lab exams to ensure programming practice in an introductory programming...
Using lab exams to ensure programming practice in an introductory programming...Using lab exams to ensure programming practice in an introductory programming...
Using lab exams to ensure programming practice in an introductory programming...
 
UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10
UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10
UIDAI Sudhir Aggarwal Compendium_of_Papers_2009-10
 
Mapa proyecto.cmap
Mapa proyecto.cmapMapa proyecto.cmap
Mapa proyecto.cmap
 
Adnavi ulfa 111301630016
Adnavi ulfa 111301630016Adnavi ulfa 111301630016
Adnavi ulfa 111301630016
 
Marketing de Produtos Digitais
Marketing de Produtos DigitaisMarketing de Produtos Digitais
Marketing de Produtos Digitais
 
Islamic culture
Islamic cultureIslamic culture
Islamic culture
 
Ventiladores
VentiladoresVentiladores
Ventiladores
 
Lks iodometri jadi
Lks iodometri jadiLks iodometri jadi
Lks iodometri jadi
 
Ecolalia mayra
Ecolalia mayraEcolalia mayra
Ecolalia mayra
 
Intro con interp.j430.f2016
Intro con interp.j430.f2016Intro con interp.j430.f2016
Intro con interp.j430.f2016
 
ردا على علي جمعة : الألباني، جهاده، حياته
ردا على علي جمعة : الألباني، جهاده، حياتهردا على علي جمعة : الألباني، جهاده، حياته
ردا على علي جمعة : الألباني، جهاده، حياته
 
Halloween o noche de brujas[1]
Halloween o noche de brujas[1]Halloween o noche de brujas[1]
Halloween o noche de brujas[1]
 

Similar a Backbone.js nas trincheiras

LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Workshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.jsWorkshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.jsFábio Elísio
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endGiovanny Valente
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 OverviewAlexsandro Almeida
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server FacesJoão Longo
 
IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScriptHeider Lopes
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Workshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseWorkshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseLuiz Duarte
 

Similar a Backbone.js nas trincheiras (20)

LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
Workshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.jsWorkshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.js
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Palestra
PalestraPalestra
Palestra
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server Faces
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScript
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Workshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseWorkshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + Mongoose
 

Más de Lambda 3

Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos ÁgeisExperiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos ÁgeisLambda 3
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação FuncionalLambda 3
 
Source Control
Source ControlSource Control
Source ControlLambda 3
 
Como você está criando os seus objetos?
Como você está criando os seus objetos?Como você está criando os seus objetos?
Como você está criando os seus objetos?Lambda 3
 
Keynote Lambda Day
Keynote Lambda DayKeynote Lambda Day
Keynote Lambda DayLambda 3
 
Novidades ALM Summit 2013
Novidades ALM Summit 2013Novidades ALM Summit 2013
Novidades ALM Summit 2013Lambda 3
 

Más de Lambda 3 (6)

Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos ÁgeisExperiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 
Source Control
Source ControlSource Control
Source Control
 
Como você está criando os seus objetos?
Como você está criando os seus objetos?Como você está criando os seus objetos?
Como você está criando os seus objetos?
 
Keynote Lambda Day
Keynote Lambda DayKeynote Lambda Day
Keynote Lambda Day
 
Novidades ALM Summit 2013
Novidades ALM Summit 2013Novidades ALM Summit 2013
Novidades ALM Summit 2013
 

Backbone.js nas trincheiras

Notas del editor

  1. $el = Um objeto Jquery (ou Zepto) cacheado para o elemento da view. Uma referência à mão para não precisar pesquisar o elemento no DOM toda hora
  2. AMD - Asynchronous Module DefinitionEspecifica um mecanismo para definição de módulos, de forma que esses módulos e suas referências possam ser carregadas assincronamente.O AMD veio do desejo de ter um formato que fosse melhor que “escrever um monte de tags script com dependências implícitas onde você precisa manualmente pedir”.
  3. O atributo data-main é um atributo especial que o RequireJS checará para iniciar o carregamento dos scripts.
  4. O jQuery não está especificado no shim porque o jQuery suporta AMD (existe a definição do módulo no arquivo jQury.js)
  5. Jasmine-Jquery = é uma extensão do Jasmine (facilita osasserts e a manioulação do HTML, CSS
  6. Um SPY faz um mock de qualquer função e rastreia as chamadas a elas e todos os parâmetros/argumentos enviados