Upload
mitinpavel
View
920
Download
0
Embed Size (px)
DESCRIPTION
Доклад на конференции Anadea Inc.
Citation preview
Backbone.jsПрофилактика сколиоза
Митин ПавелAnadea Inc. 2012
Контекст
социальная сеть в стадии надвигающейся бетыRuby on Rails 3.2
Контекст
рендеринг на клиентеHandlebars
Контекст
coffeescriptДа. И ещё раз Да
Контекст
полевая журналистика● свежие впечатления● постоянно изменяющиеся оценки
происходящего
События моделей и коллекций
главный урокСобытия моделей и коллекций backbone -- это становой хребетархитектуры
События моделей и коллекций
какокодclass FirstView extends Backbone.View publish: (message) -> @collection.create( { message: message }, { success: => @render() @secondView.render() } )
События моделей и коллекций
правила● Привязывайте view к событиям моделей и
коллекций● Запретите использовать колбэки в
методах backbone
События моделей и коллекций
примерclass FirstView extends Backbone.View initialize: -> @collection.on 'reset', @render, @ publish: (message) -> @collection.create message: message
class SecondView extends Backbone.View initialize: -> @collection.on 'reset', @render, @
Router
использовать, нельзя игнорироватьРоутер -- второе по значимости (после событий на моделях и коллекциях)основание архитектуры страницы
Router
корень дерева объектов● Руководит жизненным циклом view● Инстанцирует те коллекции и модели, о
которых знает больше чем● одно view
Backbone и потоки данных
в случае обилия полей ввода, используйте альтернативы● Расширения backbone● Другие javascript/coffeescript фреймворки
Структурирование дерева проекта
правилоОдин класс -- один файл
Структурирование дерева проекта
бенефиты● Упрощает навигацию по кодовой базе● Упрощает менеджмент зависимостей
Менеджмент зависимостей
require от sprocketsРаботает достаточно надежно (по крайней мере, для staging окружения:)
Трактуйте вашу модель как viewModel
logic-less шаблоныИзменяйте модель под нужды конкретной страницы. Не пытайтесь повторноиспользовать ее
Верстка
Bерстальщик должен знать некоторые особенности backbone● Правило: одно view, один tag● Конкуренция нескольких view за одни таг в DOM-дереве● Forms considered harmful
backbone + legacy-code
НетОставьте эти попытки!
Appendix
аспекты приложения, не имеющие прямого отношения к backbone● Разные шаблонные движки для сервера и клиента
(haml + handlebars)● REST Level 3 (hypermedia controls)● Декораторы вместо view-хелперов на стороне
сервера● PageObject в автоматических приемочных тестах● Сервер полнотекстового поиска как основы read-side
части приложения
Главный вывод
Архитектура с MVC на клиенте требует в ДВА раза больше времени, чемтрадиционый RoR подход