SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
http://documentcloud.github.com/backbone/




вторник, 15 ноября 11 г.
Типичный application.js:
                           1. Код не имеет структуры - набор обработчиков
                           событий




                           2. Код растет - тяжело ориентироваться




                           3. Совсем не просто проследить логику
                           взаимодействия объектов на странице




вторник, 15 ноября 11 г.
Рефакторинг - использование волшебных (function(){})()
    var MyCoolModule       =   (function(opts){     1. Код чуть более структурирован - функционал
        //public variable
                                                    организован в модули
       this.settings = opts;

       //private var
       var bla = 0;

       //public method                              2. Код отдельного модуля продолжает оставаться
       this.reset = function (){}                   довольно тяжелым и неструктурированным -
                                                    генерация html, обмен данными смешано
       //private method
       function init(){};

       //initializer
      self.init();                                  3. Если страница довольна интерактивна и объемна -
    })();                                           для оптимизации скорости и потребления памяти сырые
                                                    данные хранятся в данных js - скорее всего в объекте(ах)

    Используем:                                     глобального пространства имен.


   var myCoolObject = new MyCoolModule({params});
   //call of public functions
   myCoolObject.reset();


                                                    4. Скорее всего в этот момент мы уже воспринимаем нашу
                                                    страницу как набор объектов(визуальных,объектов по типу
                                                    данных) - но js код остается в виде методов класса, т.е.
                                                    соответствующих объектов(инкапсулирующих данные,
                                                    представляющие АПИ) - нет. Как следствие -
                                                    дополнительные расходы на работу с html кодом,
                                                    идентификацию классов источника события и пр.




вторник, 15 ноября 11 г.
Рефакторинг - MVC
  1. Bacbone.js - легковесен, дает только шаблон, обеспечивая
  свободу, не требует специального html кода
  2. Knockout.js - Model-View-ViewModel (MVVM), работает с
  помощью data аттрибутов, что означает специальный html код
  3. Sproutcore - мощный и тяжеловесный, включает MVC
  фреймворк и визуальные компоненты
  4. Require JS - по сути больше п.6, но использует AMD
  (Asynchronous Module Definition) - загрузку js по требованию и
  ассинхронно
  5. etc
  6. Custom implementations - можно написать и самому :)




вторник, 15 ноября 11 г.
Backbone.js - структура
 https://github.com/codebrew/backbone-rails
 rails g backbone:scaffold Post title:string content:string



                                                         1. Models - компонент, позволяющий организовать обмен
                                                         данными, предоставляет события(изменение, добавление...), на
                                                         которые могут подписываться Views




                                                         2. Routers - Его назначение обработка хеш навигации в приложении. В
                                                         современных браузерах это прямое управление адресной строкой, в
                                                         остальных - эмуляция через якорные ссылки(#..., настраиваемо)




                                                         3. Templates - в общем-то любой шаблонизатор(встроенный в
                                                         Underscore, EJS, JQTemplates, Mustache, Handlabars)




                                                        4. Views - ООП подход, те каждая вью отвечает за
                                                        определенный блок на странице. Если блоков несколько - то
                                                        будет несколько экземпляров вью, каждый из который хранит в
                                                        себе конкретную информацию(настройку) на логический блок.
                                                        Ограничений нет - блоки логические.




вторник, 15 ноября 11 г.
1. Router
 class Apihelp.Routers.PostsRouter extends Backbone.Router        Структура роутера:
   initialize: (options) ->                                       1. Хеш(функция, возращающая хеш) - определяет урл и соответствующее
     @posts = new Apihelp.Collections.PostsCollection()           ему действие обработчик
     @posts.reset options.posts                                   2. Набор функций обработчиков - на вход получают параметры, указанные
                                                                  в определении URL.
   routes:
    "/new"         : "newPost"
    "/index" : "index"
    "/:id/edit" : "edit"
    "/:id"     : "show"
    ".*"       : "index"

   newPost: ->
    @view = new Apihelp.Views.Posts.NewView(collection: @posts)
    $("#posts").html(@view.render().el)

   index: ->
     @view = new Apihelp.Views.Posts.IndexView(posts: @posts)
     $("#posts").html(@view.render().el)

   show: (id) ->
    post = @posts.get(id)

    @view = new Apihelp.Views.Posts.ShowView(model: post)
    $("#posts").html(@view.render().el)

   edit: (id) ->
    post = @posts.get(id)

    @view = new Apihelp.Views.Posts.EditView(model: post)
    $("#posts").html(@view.render().el)




вторник, 15 ноября 11 г.
2. View
                                                            Структура View:


 Apihelp.Views.Posts ||= {}
                                                            1. View наследуется от базового класса Baclbone.View, но может
 class Apihelp.Views.Posts.EditView extends Backbone.View
   template : JST["backbone/templates/posts/edit"]          насловедоваться и от другой вью

   events :
    "submit #edit-post" : "update"

   update : (e) ->
    e.preventDefault()                                      2. Шаблонизатор можно использовать любой, рекомендую
    e.stopPropagation()                                     Mustache(Hadlebars). Определять явно не обязательно, но удобно поскольку
                                                            сразу видно какие шаблоны используются в данной вью.
    @model.save(null,
      success : (post) =>
       @model = post
       window.location.hash = "/#{@model.id}"
    )                                                       3. Хеш реакций на события - позволяет определять любые события внутри
                                                            html блока вью(нет просмотра всего DOM страницы, только относительно
   render : ->                                              текущей view - для работы с DOM вью также есть сокращение this.$()) и
    $(this.el).html(this.template(@model.toJSON() ))        функций обработчиков. В каждый обработчик передает конктекс текущей
                                                            View(this) и пераметр, имеющий всю нужную информацию об источнике
    this.$("form").backboneLink(@model)                     события.
    return this


                                                            4. Набор обработчков событий и просто служебных функций




вторник, 15 ноября 11 г.
3. Model && Collection
                                                     Модель - предназначена для хранения логики, относящейся к конкретному
                                                     объекту - преобразования, валидации, кастомная логика, свойства и
                                                     собственно структура объектов




                                                     Коллекция - упорядоченный найбор объекто моделей. Предоставляет
                                                     события об изменения в моделях, появлении новых и пр. Предоставляет
                                                     методы для обновления, сохранения, сравнения данных, включая
                                                     взимодействие с сервером
 class Apihelp.Models.Post extends Backbone.Model
   paramRoot: 'post'

   defaults:
    title: null
    content: null
                                                     Существуют множество реализаций моделей и их способом взиамодействия
 class Apihelp.Collections.PostsCollection extends   с сервером - rest api(rails), websocket и другие
 Backbone.Collection
   model: Apihelp.Models.Post
   url: '/posts'




                                                     Интегрированы методы Underscore.js, для обработки наборов моделей




вторник, 15 ноября 11 г.
4. Templates
                                                                     Backbone дает свободу выбора шаблонизатора(Jquery Templates, Underscore,
                                                                     EJS,Mustache, и еще тонна существующих)


 <h1>Edit post</h1>

 <form id="edit-post" name="post">
  <div class="field">
   <label for="title"> title:</label>
   <input type="text" name="title" id="title" value={{ title }} >
  </div>
                                                                     НО! Самый удобный способ - когда шаблоны на стороне сервера
  <div class="field">                                                 компилируются в один файл, содержащий JS функций, собранный в
    <label for="content"> content:</label>                           массив(JST):
    <input type="text" name="content" id="content"                   - не загрязняется html
 value={{ content }} >                                               - систематизация позволяет динамически конструировать вызовы шаблонов
  </div>

  <div class="actions">
   <input type="submit" value="Update Post" />
  </div>

 </form>

 <a href="#/index">Back</a>                                         Rails.version <3.1 => Jammit
                                                                    Rails.version >=3.1 => AssetPipeline(HadleBars + HadleBars Assets) || Jammit




вторник, 15 ноября 11 г.
To sum up:
    1MVC(Backbone) - не панацея. Это удобный инстурмент,
    когда JS кода много.
    2. Backbone - позволяет структурировать JS код по типу
    Rails приложения, что облегчает его поддержку и развитие
    3. События позволяют сделать код слабо связанным -
    облегчает структура приложения
    4. Production ready




      THE END


вторник, 15 ноября 11 г.

Contenu connexe

Tendances

Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPressDarja Kruzhkova
 
лабораторная работа №4 uml
лабораторная работа №4 umlлабораторная работа №4 uml
лабораторная работа №4 umlNatasha Lysakova
 
Rambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPERRambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPERRAMBLER&Co
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
Лабораторная работа № 4. МАПО - диаграммы uml
Лабораторная работа № 4. МАПО - диаграммы umlЛабораторная работа № 4. МАПО - диаграммы uml
Лабораторная работа № 4. МАПО - диаграммы umlPresentationCreater
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Eugene Fidelin
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборокAndrii Podanenko
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
Контент ориентированное программирование
Контент ориентированное программированиеКонтент ориентированное программирование
Контент ориентированное программированиеksmster
 
идеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинидеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинdrupalconf
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5Dima Dzuba
 
iOS-03-Управление памятью
iOS-03-Управление памятьюiOS-03-Управление памятью
iOS-03-Управление памятьюNoveo
 

Tendances (20)

Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 
лабораторная работа №4 uml
лабораторная работа №4 umlлабораторная работа №4 uml
лабораторная работа №4 uml
 
Rambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPERRambler.iOS #5: Подмодули в VIPER
Rambler.iOS #5: Подмодули в VIPER
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
Лабораторная работа № 4. МАПО - диаграммы uml
Лабораторная работа № 4. МАПО - диаграммы umlЛабораторная работа № 4. МАПО - диаграммы uml
Лабораторная работа № 4. МАПО - диаграммы uml
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборок
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
томск
томсктомск
томск
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
 
Контент ориентированное программирование
Контент ориентированное программированиеКонтент ориентированное программирование
Контент ориентированное программирование
 
идеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинидеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихин
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Ограничение доступа в ruby on rails
Ограничение доступа в ruby on railsОграничение доступа в ruby on rails
Ограничение доступа в ruby on rails
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
Lec 13
Lec 13Lec 13
Lec 13
 
iOS-03-Управление памятью
iOS-03-Управление памятьюiOS-03-Управление памятью
iOS-03-Управление памятью
 

En vedette

16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci
16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci
16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio FucciFabio Fucci
 
M5S Pomezia - Esito questionari rifiuti
M5S Pomezia - Esito questionari rifiutiM5S Pomezia - Esito questionari rifiuti
M5S Pomezia - Esito questionari rifiutiFabio Fucci
 
Christopher Brown's Portfolio
Christopher Brown's PortfolioChristopher Brown's Portfolio
Christopher Brown's PortfolioChristopher Brown
 
Lhan sel_uk__a__p_kal_yorum
 Lhan sel_uk__a__p_kal_yorum Lhan sel_uk__a__p_kal_yorum
Lhan sel_uk__a__p_kal_yorumBekir Şensal
 
2015 WP AP Scholars
2015 WP AP Scholars2015 WP AP Scholars
2015 WP AP Scholarswpwebsite
 
Mambo Health Gaming, Games for Health 2011
Mambo Health Gaming, Games for Health 2011Mambo Health Gaming, Games for Health 2011
Mambo Health Gaming, Games for Health 2011Timothy Schmidt
 

En vedette (7)

16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci
16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci
16/12/2011 - Rinnovo della fiducia al Consigliere Comunale del M5S Fabio Fucci
 
M5S Pomezia - Esito questionari rifiuti
M5S Pomezia - Esito questionari rifiutiM5S Pomezia - Esito questionari rifiuti
M5S Pomezia - Esito questionari rifiuti
 
Christopher Brown's Portfolio
Christopher Brown's PortfolioChristopher Brown's Portfolio
Christopher Brown's Portfolio
 
Water bottle incident
Water bottle incidentWater bottle incident
Water bottle incident
 
Lhan sel_uk__a__p_kal_yorum
 Lhan sel_uk__a__p_kal_yorum Lhan sel_uk__a__p_kal_yorum
Lhan sel_uk__a__p_kal_yorum
 
2015 WP AP Scholars
2015 WP AP Scholars2015 WP AP Scholars
2015 WP AP Scholars
 
Mambo Health Gaming, Games for Health 2011
Mambo Health Gaming, Games for Health 2011Mambo Health Gaming, Games for Health 2011
Mambo Health Gaming, Games for Health 2011
 

Similaire à Backbone js

Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Yandex
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза MitinPavel
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
LMS Moodle с точки зрения программиста
LMS Moodle с точки зрения программистаLMS Moodle с точки зрения программиста
LMS Moodle с точки зрения программистаCEE-SEC(R)
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014Andrey Listochkin
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсDigital-агентство Мэйк
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...Viktor Likin
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Constantin Kichinsky
 

Similaire à Backbone js (20)

Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
LMS Moodle с точки зрения программиста
LMS Moodle с точки зрения программистаLMS Moodle с точки зрения программиста
LMS Moodle с точки зрения программиста
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Underscore js
Underscore jsUnderscore js
Underscore js
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейс
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!
 

Backbone js

  • 2. Типичный application.js: 1. Код не имеет структуры - набор обработчиков событий 2. Код растет - тяжело ориентироваться 3. Совсем не просто проследить логику взаимодействия объектов на странице вторник, 15 ноября 11 г.
  • 3. Рефакторинг - использование волшебных (function(){})() var MyCoolModule = (function(opts){ 1. Код чуть более структурирован - функционал //public variable организован в модули this.settings = opts; //private var var bla = 0; //public method 2. Код отдельного модуля продолжает оставаться this.reset = function (){} довольно тяжелым и неструктурированным - генерация html, обмен данными смешано //private method function init(){}; //initializer self.init(); 3. Если страница довольна интерактивна и объемна - })(); для оптимизации скорости и потребления памяти сырые данные хранятся в данных js - скорее всего в объекте(ах) Используем: глобального пространства имен. var myCoolObject = new MyCoolModule({params}); //call of public functions myCoolObject.reset(); 4. Скорее всего в этот момент мы уже воспринимаем нашу страницу как набор объектов(визуальных,объектов по типу данных) - но js код остается в виде методов класса, т.е. соответствующих объектов(инкапсулирующих данные, представляющие АПИ) - нет. Как следствие - дополнительные расходы на работу с html кодом, идентификацию классов источника события и пр. вторник, 15 ноября 11 г.
  • 4. Рефакторинг - MVC 1. Bacbone.js - легковесен, дает только шаблон, обеспечивая свободу, не требует специального html кода 2. Knockout.js - Model-View-ViewModel (MVVM), работает с помощью data аттрибутов, что означает специальный html код 3. Sproutcore - мощный и тяжеловесный, включает MVC фреймворк и визуальные компоненты 4. Require JS - по сути больше п.6, но использует AMD (Asynchronous Module Definition) - загрузку js по требованию и ассинхронно 5. etc 6. Custom implementations - можно написать и самому :) вторник, 15 ноября 11 г.
  • 5. Backbone.js - структура https://github.com/codebrew/backbone-rails rails g backbone:scaffold Post title:string content:string 1. Models - компонент, позволяющий организовать обмен данными, предоставляет события(изменение, добавление...), на которые могут подписываться Views 2. Routers - Его назначение обработка хеш навигации в приложении. В современных браузерах это прямое управление адресной строкой, в остальных - эмуляция через якорные ссылки(#..., настраиваемо) 3. Templates - в общем-то любой шаблонизатор(встроенный в Underscore, EJS, JQTemplates, Mustache, Handlabars) 4. Views - ООП подход, те каждая вью отвечает за определенный блок на странице. Если блоков несколько - то будет несколько экземпляров вью, каждый из который хранит в себе конкретную информацию(настройку) на логический блок. Ограничений нет - блоки логические. вторник, 15 ноября 11 г.
  • 6. 1. Router class Apihelp.Routers.PostsRouter extends Backbone.Router Структура роутера: initialize: (options) -> 1. Хеш(функция, возращающая хеш) - определяет урл и соответствующее @posts = new Apihelp.Collections.PostsCollection() ему действие обработчик @posts.reset options.posts 2. Набор функций обработчиков - на вход получают параметры, указанные в определении URL. routes: "/new" : "newPost" "/index" : "index" "/:id/edit" : "edit" "/:id" : "show" ".*" : "index" newPost: -> @view = new Apihelp.Views.Posts.NewView(collection: @posts) $("#posts").html(@view.render().el) index: -> @view = new Apihelp.Views.Posts.IndexView(posts: @posts) $("#posts").html(@view.render().el) show: (id) -> post = @posts.get(id) @view = new Apihelp.Views.Posts.ShowView(model: post) $("#posts").html(@view.render().el) edit: (id) -> post = @posts.get(id) @view = new Apihelp.Views.Posts.EditView(model: post) $("#posts").html(@view.render().el) вторник, 15 ноября 11 г.
  • 7. 2. View Структура View: Apihelp.Views.Posts ||= {} 1. View наследуется от базового класса Baclbone.View, но может class Apihelp.Views.Posts.EditView extends Backbone.View template : JST["backbone/templates/posts/edit"] насловедоваться и от другой вью events : "submit #edit-post" : "update" update : (e) -> e.preventDefault() 2. Шаблонизатор можно использовать любой, рекомендую e.stopPropagation() Mustache(Hadlebars). Определять явно не обязательно, но удобно поскольку сразу видно какие шаблоны используются в данной вью. @model.save(null, success : (post) => @model = post window.location.hash = "/#{@model.id}" ) 3. Хеш реакций на события - позволяет определять любые события внутри html блока вью(нет просмотра всего DOM страницы, только относительно render : -> текущей view - для работы с DOM вью также есть сокращение this.$()) и $(this.el).html(this.template(@model.toJSON() )) функций обработчиков. В каждый обработчик передает конктекс текущей View(this) и пераметр, имеющий всю нужную информацию об источнике this.$("form").backboneLink(@model) события. return this 4. Набор обработчков событий и просто служебных функций вторник, 15 ноября 11 г.
  • 8. 3. Model && Collection Модель - предназначена для хранения логики, относящейся к конкретному объекту - преобразования, валидации, кастомная логика, свойства и собственно структура объектов Коллекция - упорядоченный найбор объекто моделей. Предоставляет события об изменения в моделях, появлении новых и пр. Предоставляет методы для обновления, сохранения, сравнения данных, включая взимодействие с сервером class Apihelp.Models.Post extends Backbone.Model paramRoot: 'post' defaults: title: null content: null Существуют множество реализаций моделей и их способом взиамодействия class Apihelp.Collections.PostsCollection extends с сервером - rest api(rails), websocket и другие Backbone.Collection model: Apihelp.Models.Post url: '/posts' Интегрированы методы Underscore.js, для обработки наборов моделей вторник, 15 ноября 11 г.
  • 9. 4. Templates Backbone дает свободу выбора шаблонизатора(Jquery Templates, Underscore, EJS,Mustache, и еще тонна существующих) <h1>Edit post</h1> <form id="edit-post" name="post"> <div class="field"> <label for="title"> title:</label> <input type="text" name="title" id="title" value={{ title }} > </div> НО! Самый удобный способ - когда шаблоны на стороне сервера <div class="field"> компилируются в один файл, содержащий JS функций, собранный в <label for="content"> content:</label> массив(JST): <input type="text" name="content" id="content" - не загрязняется html value={{ content }} > - систематизация позволяет динамически конструировать вызовы шаблонов </div> <div class="actions"> <input type="submit" value="Update Post" /> </div> </form> <a href="#/index">Back</a> Rails.version <3.1 => Jammit Rails.version >=3.1 => AssetPipeline(HadleBars + HadleBars Assets) || Jammit вторник, 15 ноября 11 г.
  • 10. To sum up: 1MVC(Backbone) - не панацея. Это удобный инстурмент, когда JS кода много. 2. Backbone - позволяет структурировать JS код по типу Rails приложения, что облегчает его поддержку и развитие 3. События позволяют сделать код слабо связанным - облегчает структура приложения 4. Production ready THE END вторник, 15 ноября 11 г.