backbone.js

166
Радослав Станков OpenFest 05/11/2011 Tuesday, November 8, 11

Upload: openfest-team

Post on 08-May-2015

9.608 views

Category:

Technology


0 download

DESCRIPTION

Backbone.js - Радослав Станков

TRANSCRIPT

Page 1: Backbone.js

Радослав СтанковOpenFest 05/11/2011

Tuesday, November 8, 11

Page 2: Backbone.js

Кой съм аз?

@rstankov

http://rstankov.comhttp://github.com/rstankov

Tuesday, November 8, 11

Page 3: Backbone.js

Tuesday, November 8, 11

Page 4: Backbone.js

Tuesday, November 8, 11

Page 5: Backbone.js

Tuesday, November 8, 11

Page 6: Backbone.js

Tuesday, November 8, 11

Page 7: Backbone.js

Tuesday, November 8, 11

Page 8: Backbone.js

Tuesday, November 8, 11

Page 9: Backbone.js

Tuesday, November 8, 11

Page 10: Backbone.js

Tuesday, November 8, 11

Page 11: Backbone.js

Tuesday, November 8, 11

Page 12: Backbone.js

Tuesday, November 8, 11

Page 13: Backbone.js

Tuesday, November 8, 11

Page 14: Backbone.js

Tuesday, November 8, 11

Page 15: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 16: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 17: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 18: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 19: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 20: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 21: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 22: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 23: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 24: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 25: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 26: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 27: Backbone.js

Model View

Browser

Controller

СървърTuesday, November 8, 11

Page 28: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 29: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 30: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 31: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 32: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 33: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 34: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 35: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 36: Backbone.js

Model

View

Dom

Browser

Tuesday, November 8, 11

Page 37: Backbone.js

Backbone.Events

Tuesday, November 8, 11

Page 38: Backbone.js

var object = {};

$.extend(object, Backbone.Events);

object.bind('eventName', function() { console.log('1');});

object.bind('eventName', function() { console.log('2');});

object.trigger('eventName');

// prints '1' and '2'

Tuesday, November 8, 11

Page 39: Backbone.js

var object = {};

$.extend(object, Backbone.Events);

object.bind('eventName', function() { console.log('1');});

object.bind('eventName', function() { console.log('2');});

object.trigger('eventName');

// prints '1' and '2'

Tuesday, November 8, 11

Page 40: Backbone.js

var object = {};

$.extend(object, Backbone.Events);

object.bind('eventName', function() { console.log('1');});

object.bind('eventName', function() { console.log('2');});

object.trigger('eventName');

// prints '1' and '2'

Tuesday, November 8, 11

Page 41: Backbone.js

var object = {};

$.extend(object, Backbone.Events);

object.bind('eventName', function() { console.log('1');});

object.bind('eventName', function() { console.log('2');});

object.trigger('eventName');

// prints '1' and '2'

Tuesday, November 8, 11

Page 42: Backbone.js

var object = {};

$.extend(object, Backbone.Events);

object.bind('eventName', function() { console.log('1');});

object.bind('eventName', function() { console.log('2');});

object.trigger('eventName');

// prints '1' and '2'

Tuesday, November 8, 11

Page 43: Backbone.js

Backbone.Model

Tuesday, November 8, 11

Page 44: Backbone.js

var Person = Backbone.Model.extend({ initialize: function(){ console.log("I'm alive!"); }});

new Person();

Tuesday, November 8, 11

Page 45: Backbone.js

var Person = Backbone.Model.extend({ initialize: function(){ console.log("I'm alive!"); }});

new Person();

Tuesday, November 8, 11

Page 46: Backbone.js

var Person = Backbone.Model.extend({ initialize: function(){ console.log("I'm alive!"); }});

new Person();

Tuesday, November 8, 11

Page 47: Backbone.js

var Person = Backbone.Model.extend({});

var me = new Person({name: 'Radoslav'});

me.get('name'); // Radoslavme.set({lastName: 'Stankov'});me.get('lastName'); // Stankov

Tuesday, November 8, 11

Page 48: Backbone.js

var Person = Backbone.Model.extend({});

var me = new Person({name: 'Radoslav'});

me.get('name'); // Radoslavme.set({lastName: 'Stankov'});me.get('lastName'); // Stankov

Tuesday, November 8, 11

Page 49: Backbone.js

var Person = Backbone.Model.extend({});

var me = new Person({name: 'Radoslav'});

me.get('name'); // Radoslavme.set({lastName: 'Stankov'});me.get('lastName'); // Stankov

Tuesday, November 8, 11

Page 50: Backbone.js

var Person = Backbone.Model.extend({});

var me = new Person({name: 'Radoslav'});

me.get('name'); // Radoslavme.set({lastName: 'Stankov'});me.get('lastName'); // Stankov

Tuesday, November 8, 11

Page 51: Backbone.js

var Person = Backbone.Model.extend({});

var me = new Person({name: 'Radoslav'});

me.get('name'); // Radoslavme.set({lastName: 'Stankov'});me.get('lastName'); // Stankov

Tuesday, November 8, 11

Page 52: Backbone.js

var Person = Backbone.Model.extend({ defaults: { name: 'John', lastName: 'Doe', }});

var me = new Person();me.get('name'); // Johnme.get('lastName'); // Doe

Tuesday, November 8, 11

Page 53: Backbone.js

var Person = Backbone.Model.extend({ defaults: { name: 'John', lastName: 'Doe', }});

var me = new Person();me.get('name'); // Johnme.get('lastName'); // Doe

Tuesday, November 8, 11

Page 54: Backbone.js

var Person = Backbone.Model.extend({ defaults: { name: 'John', lastName: 'Doe', }});

var me = new Person();me.get('name'); // Johnme.get('lastName'); // Doe

Tuesday, November 8, 11

Page 55: Backbone.js

var Person = Backbone.Model.extend({ defaults: { name: 'John', lastName: 'Doe', }});

var me = new Person();me.get('name'); // Johnme.get('lastName'); // Doe

Tuesday, November 8, 11

Page 56: Backbone.js

var Calculator = Backbone.Model.extend({ defaults: { value: 0 }, value: function(){ return this.get('value'); }, sum: function(value){ this.set({value: value + this.get('value')}); }, reset: function(){ this.set({value: 0}); }});

Tuesday, November 8, 11

Page 57: Backbone.js

var Calculator = Backbone.Model.extend({ defaults: { value: 0 }, value: function(){ return this.get('value'); }, sum: function(value){ this.set({value: value + this.get('value')}); }, reset: function(){ this.set({value: 0}); }});

Tuesday, November 8, 11

Page 58: Backbone.js

var Calculator = Backbone.Model.extend({ defaults: { value: 0 }, value: function(){ return this.get('value'); }, sum: function(value){ this.set({value: value + this.get('value')}); }, reset: function(){ this.set({value: 0}); }});

Tuesday, November 8, 11

Page 59: Backbone.js

var Calculator = Backbone.Model.extend({ defaults: { value: 0 }, value: function(){ return this.get('value'); }, sum: function(value){ this.set({value: value + this.get('value')}); }, reset: function(){ this.set({value: 0}); }});

Tuesday, November 8, 11

Page 60: Backbone.js

var Calculator = Backbone.Model.extend({ defaults: { value: 0 }, value: function(){ return this.get('value'); }, sum: function(value){ this.set({value: value + this.get('value')}); }, reset: function(){ this.set({value: 0}); }});

Tuesday, November 8, 11

Page 61: Backbone.js

var cal = new Calculator();

cal.bind('change:value', function(model, value){ console.log(value);});

cal.bind('change', function(model){ console.log(model.get('value'));});

cal.bind('all', function(eventName) { console.log('I see every thing!', eventName);});

Tuesday, November 8, 11

Page 62: Backbone.js

var cal = new Calculator();

cal.bind('change:value', function(model, value){ console.log(value);});

cal.bind('change', function(model){ console.log(model.get('value'));});

cal.bind('all', function(eventName) { console.log('I see every thing!', eventName);});

Tuesday, November 8, 11

Page 63: Backbone.js

var cal = new Calculator();

cal.bind('change:value', function(model, value){ console.log(value);});

cal.bind('change', function(model){ console.log(model.get('value'));});

cal.bind('all', function(eventName) { console.log('I see every thing!', eventName);});

Tuesday, November 8, 11

Page 64: Backbone.js

var cal = new Calculator();

cal.bind('change:value', function(model, value){ console.log(value);});

cal.bind('change', function(model){ console.log(model.get('value'));});

cal.bind('all', function(eventName) { console.log('I see every thing!', eventName);});

Tuesday, November 8, 11

Page 65: Backbone.js

var cal = new Calculator();

cal.bind('myEvent', function(){ console.log('KaBoom....');});

cal.trigger('myEvent');

Tuesday, November 8, 11

Page 66: Backbone.js

var Product = Backbone.Model.extend({ urlRoot: '/products'}); var chair = new Product({ name: 'chair', price: 10});

chair.save();

// POST /products

Tuesday, November 8, 11

Page 67: Backbone.js

var Product = Backbone.Model.extend({ url: function(){ return '/products/' + (this.isNew() ? '' : this.id); }});

var chair = new Product({ id: 5, name: 'chair', price: 10});

chair.save();

// PUT /products/1

Tuesday, November 8, 11

Page 68: Backbone.js

http://documentcloud.github.com/backbone/#Model-save

Tuesday, November 8, 11

Page 69: Backbone.js

И още...• validate• escape• has• unset• clear• hasChanged• changedAttributes• previousAttributes• fetch• toJSON• clone

Tuesday, November 8, 11

Page 70: Backbone.js

Backbone.View

Tuesday, November 8, 11

Page 71: Backbone.js

Tuesday, November 8, 11

Page 72: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 73: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 74: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 75: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 76: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 77: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 78: Backbone.js

var UserNameView = Backbone.View.extend({ tagName: 'input', className: 'string optional', id: 'user-name', attributes: { type: 'string', name: 'user[name]' }});

var userName = new UserNameView();

console.log(userName.el);

<input type="string" name="user[name]" id="user-name" class="string optional">

Tuesday, November 8, 11

Page 79: Backbone.js

var UsersListView = Backbone.View.extend({ el: '#users-list'});

var userList = new UsersListView();

console.log(userList.el);

Tuesday, November 8, 11

Page 80: Backbone.js

var EditBoxView = Backbone.View.extend({});

var element = $('#edit-box-view').get(0), editBox = new EditBoxView({el: element});

console.log(editBox.el === element);

Tuesday, November 8, 11

Page 81: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 82: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 83: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 84: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 85: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 86: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 87: Backbone.js

var DocumentView = Backbone.View.extend({ events: { 'dblclick': 'open', 'click .grid .doc': 'select', 'customEvent .title': 'custom' }, open: function() {}, select: function() {}, custom: function() {}});

Tuesday, November 8, 11

Page 88: Backbone.js

<script type="text/template" id="news"> <h1><%= title %></h1> <time><%= created_at %></time> <p><%= text %></p></script>

Tuesday, November 8, 11

Page 89: Backbone.js

var NewsView = Backbone.View.extend({ template: _.template($('#news').html()), render: function() { this.el.innerHTML = this.template(this.model); return this; }});

Tuesday, November 8, 11

Page 90: Backbone.js

var view = new NewsView({ model: { title: "News Title", created_at: "Today", text: "Long text" }});

document.body.appendChild(view.render().el);

Tuesday, November 8, 11

Page 91: Backbone.js

<script type="text/template" id="news"> <h1><%= title %></h1> <time><%= created_at %></time> <p><%= text %></p></script>

Tuesday, November 8, 11

Page 92: Backbone.js

<div> <h1>News Title</h1> <time>Today</time> <p>Long text</p></div>

Tuesday, November 8, 11

Page 93: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 94: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 95: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 96: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 97: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 98: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 99: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 100: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 101: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 102: Backbone.js

Model

View

DOM

Tuesday, November 8, 11

Page 103: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 104: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 105: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 106: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 107: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 108: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 109: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 110: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 111: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 112: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 113: Backbone.js

Model

View

DOM

View 2

Tuesday, November 8, 11

Page 114: Backbone.js

Model

View

DOM

View 2

View 3

Tuesday, November 8, 11

Page 115: Backbone.js

Model

View

DOM

View 2

View 3

View 4

Tuesday, November 8, 11

Page 116: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 117: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 118: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 119: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 120: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 121: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 122: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 123: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 124: Backbone.js

Model

View

DOM

View 2

View 3

View 4

View .. N

Tuesday, November 8, 11

Page 125: Backbone.js

Demo

Tuesday, November 8, 11

Page 126: Backbone.js

var Calculator = Backbone.Model.extend({ defaults: { value: 0 }, increment: function() { this.set({'value': this.get('value') + 1}); }, decrement: function() { this.set({'value': this.get('value') - 1}); }, getValue: function() { return this.get('value'); }});

Tuesday, November 8, 11

Page 127: Backbone.js

var ButtonsView = Backbone.View.extend({ events: { 'click .plus': 'plus', 'click .minus': 'minus' }, plus: function() { this.model.increment(); }, minus: function() { this.model.decrement(); }});

Tuesday, November 8, 11

Page 128: Backbone.js

var DisplayView = Backbone.View.extend({ initialize: function() { this.model.bind('change:value', this.render, this); this.render(); }, render: function() { this.el.innerHTML = this.model.getValue(); return this; }});

Tuesday, November 8, 11

Page 129: Backbone.js

var cal = new Calculator();

new ButtonsView({model: cal, el: '.buttons'});new DisplayView({model: cal, el: '.display'});

Tuesday, November 8, 11

Page 130: Backbone.js

Backbone.Collection

Tuesday, November 8, 11

Page 131: Backbone.js

var ProductsCollection = Backbone.Collection.extend({ model: Product});

var products = new ProductsCollection();

products.fetch();

products.bind('reset', function(list) { console.log('Loaded', list.length, 'records');});

Tuesday, November 8, 11

Page 132: Backbone.js

products.bind('add', function(model) { console.log('new product added');});

products.bind('remove', function(model) { console.log('item product removed');});

Tuesday, November 8, 11

Page 133: Backbone.js

И още...

• Underscore Methods• add / remove / at• sort / comparator• reset• create• url• toJSON

Tuesday, November 8, 11

Page 134: Backbone.js

Backbone.Router

Tuesday, November 8, 11

Page 135: Backbone.js

Tuesday, November 8, 11

Page 136: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 137: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 138: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 139: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 140: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 141: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 142: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 143: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 144: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 145: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 146: Backbone.js

var AppRouter = Backbone.Router.extend({ routes: { 'pages': 'index', 'pages/search/:q': 'search', 'pages/:id': 'show' }, initialize: function() { console.log('initialize'); }, index: function() { /* code */ }, search: function(query) { /* code */ }, show: function(id) { /* code */ }});

var app = new AppRouter();

Backbone.history.start();

Tuesday, November 8, 11

Page 147: Backbone.js

app.navigate('pages', true);app.navigate('pages/search/title', true);app.navigate('pages/3', true);

Tuesday, November 8, 11

Page 148: Backbone.js

site.com/path#pagessite.com/path#pages/search/titlesite.com/path#pages/3

Tuesday, November 8, 11

Page 149: Backbone.js

Tuesday, November 8, 11

Page 150: Backbone.js

Backbone.history.start({pushState: true});

Tuesday, November 8, 11

Page 151: Backbone.js

site.com/path#pagessite.com/path#pages/search/titlesite.com/path#pages/3

Tuesday, November 8, 11

Page 152: Backbone.js

site.com/path/pagessite.com/path/pages/search/titlesite.com/path/pages/3

Tuesday, November 8, 11

Page 153: Backbone.js

Tuesday, November 8, 11

Page 154: Backbone.js

Tuesday, November 8, 11

Page 155: Backbone.js

Tuesday, November 8, 11

Page 156: Backbone.js

Tuesday, November 8, 11

Page 157: Backbone.js

Tuesday, November 8, 11

Page 158: Backbone.js

Tuesday, November 8, 11

Page 159: Backbone.js

Tuesday, November 8, 11

Page 160: Backbone.js

Недостатъци

Tuesday, November 8, 11

Page 161: Backbone.js

Алтернативи

Tuesday, November 8, 11

Page 162: Backbone.js

Алтернативи

Tuesday, November 8, 11

Page 163: Backbone.js

Алтернативи

Tuesday, November 8, 11

Page 164: Backbone.js

Алтернативи

Tuesday, November 8, 11

Page 165: Backbone.js

Въпроси?

Tuesday, November 8, 11

Page 166: Backbone.js

Благодаря за вниманието

@rstankov

Tuesday, November 8, 11