Intro to Backbone.js

29
Backbone.js Slava Belokurski Weavora Team

description

Internal presentation about Backbone.js

Transcript of Intro to Backbone.js

Page 1: Intro to Backbone.js

Backbone.js

Slava BelokurskiWeavora Team

Page 2: Intro to Backbone.js

Почему не JQuery?

JQuery хранит данные в DOM <li id="itemId_<?php echo $item->id; ?>">View Item Data</li>

Page 3: Intro to Backbone.js

Почему не JQuery?

JQuery это лапша из callback-ов $.get(url, function(data){

var items = [];data.each(function(item){

items.push("<li id="itemId"+item.id+>view</li>");});$("li").on('click', function(){

//and more more more....});

});

Page 4: Intro to Backbone.js

Да, мы к этому привыкли, и это не сложно, но...

Page 5: Intro to Backbone.js

Backbone.js придает структуру веб-приложениям с помощью моделей с биндингами по ключу и пользовательскими событиями, коллекций с богатым набором методов с перечислимыми сущностями, представленийс декларативной обработкой событий; и соединяет это все с вашим существующим REST-овым JSON API.

Page 6: Intro to Backbone.js

Backbone это не

● инструмент управления DOM● штука рисующая анимацию● Фреймворк, навязывающий свой Control

Flow● не всё в одном

Page 7: Intro to Backbone.js

Для чего это вообще нужно?

Все приложения, рендеринг которых происходит на клиенте

Page 8: Intro to Backbone.js

Составляющие

1) Router2) History3) Model4) View

View

Router Model + Collection

Browser

Page 9: Intro to Backbone.js

Events

● on● off● trigger class Item extends Backbone.Events

... item.on "alert", callbackitem.trigger "alert", args

Page 10: Intro to Backbone.js

Routerclass Controller extends Backbone.Router

routes:"" : "index""!/": "index""!/news": "news""!/music": "music""!/post/:id": "showPost"

index: ->

Views.page.render() if Views.page?

news: ->console.log "news"

music: ->

console.log "music"

showPost: (id)->if Views.postPage?

post = new Post _id: idViews.postPage.setModel postpost.fetch()

Page 11: Intro to Backbone.js

А как же индексация?

Page 12: Intro to Backbone.js

History

Backbone.history.start()

Page 13: Intro to Backbone.js

Model

● Представление данных● Генерация событий● Общение с сервером● Повторное использование

Page 14: Intro to Backbone.js

Model (use Backbone.Sync)

Rest Fetch -> HTTP GET /url/idSave(new) -> HTTP POST /urlSave -> HTTP PUT /url/idDelete -> HTTP DELETE /url/id

Page 15: Intro to Backbone.js

class Post extends Backbone.ModelurlRoot : '/post'idAttribute: '_id'

Model

Page 16: Intro to Backbone.js

Model

post = new Post()post.set title : "post title"post.save() #trigger sync

Page 17: Intro to Backbone.js

Collectionclass PostCollection extends Backbone.Collection

model: Posturl: '/post'

posts = new PostCollection()posts.fetch()

Page 18: Intro to Backbone.js

Collection

поддерживает все методы Uderscore.js

Page 19: Intro to Backbone.js

View

class ColorBoxView extends Backbone.View tagName: 'li' initialize: -> @template = $('#color-box-template').template() @model.bind 'change', @render @model.view = @

render: => $(@el).html $.tmpl @template, @model.toJSON() return @

Page 20: Intro to Backbone.js

В результате

● Больший уровень абстракции● Разделение UI и Данных● Избавляемся от колбэков

Page 21: Intro to Backbone.js

В результате

● RESTful service based data layer● Events позволяют всё время поддерживать

данные и views в актуальном виде● Просто использовать Template движки● Хорошая система роутинга Всё это обернуто в легковесный JS framework

Page 22: Intro to Backbone.js

Зависимости

● Underscore● JQuery or Zepto● Json2.js

Page 23: Intro to Backbone.js

Примеры использования

Page 24: Intro to Backbone.js
Page 25: Intro to Backbone.js

DocumentCloud

Page 26: Intro to Backbone.js

LinkedIn Mobile

Page 27: Intro to Backbone.js

Foursquare

Page 28: Intro to Backbone.js

Basecamp Mobile

Page 29: Intro to Backbone.js

Короче круть! ®