marionettejs. shall we dance?

37
MARIONETTE SHALL WE DANCE? Ксения Редунова @Katidotk

Upload: kseniya-redunova

Post on 14-Apr-2017

796 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: MarionetteJS. Shall we dance?

MARIONETTESHALL WE DANCE?

Ксения Редунова @Katidotk

Page 2: MarionetteJS. Shall we dance?

BACKBONEJSПЛЮСЫ И МИНУСЫ

Page 3: MarionetteJS. Shall we dance?

• Минималистичная, простая и гибкая

• Отличная событийная архитектура

• Реализация Model/Collection для REST

• Хорошее разделение кода MVW

ПЛЮСЫ

Page 4: MarionetteJS. Shall we dance?

• Минималистичная :)

• Слишком легко прийти не туда

• Нет основного класса Application

• Нет вложенных иерархий вью

• Нет организации layouts (header/footer/sidebar/content etc)

• Метод render не делает ничего по умолчанию

• Управление памятью

МИНУСЫ

Page 5: MarionetteJS. Shall we dance?

MARIONETTE

Page 6: MarionetteJS. Shall we dance?

• Составная библиотека для упрощения разработки крупномасштабных приложений

• Представляет набор общих паттернов проектирования и реализации

• Сокращает объем стандартного кода благодаря типам вью

• Содержит вложенные вью

• Управляет памятью

• Объединяет событийную архитектуру и агрегатор событий

Page 7: MarionetteJS. Shall we dance?

Marionette.Application

•Управление приложжением - start, stop, и другая функциональность

•Модульность

•На самом деле, “application” это просто объект

Page 8: MarionetteJS. Shall we dance?

MODULEIs deprecated!

используйте AMD/CommonJS/ES6 modules

Page 9: MarionetteJS. Shall we dance?

MARIONETTE VIEW MAGIC

Page 10: MarionetteJS. Shall we dance?

MARIONETTE VIEW MAGIC

• Рендеринг есть и привязан к изменениям модели

• Управление шаблоном

• Содержит UI object

• Обеспечивает метод .close()

• Расширяемые

Page 11: MarionetteJS. Shall we dance?

TEMPLATE HELPERS

Page 12: MarionetteJS. Shall we dance?

TEMPLATE HELPERS

Page 13: MarionetteJS. Shall we dance?

Marionette.ItemView• Вью, который рендерится на основании данных модели

• атрибут “model”

• атрибут “template”

• рендерится автоматически

• modelEvents – методы вью вызываются на событиях модели

Page 14: MarionetteJS. Shall we dance?

UI OBJECTUI объект создает кэшированные атрибуты, которые указывают

на объекты, выбранные jQuery

Page 15: MarionetteJS. Shall we dance?

Marionette.CollectionView

• Вью рендерится на основании данных из Collection

• Автоматически перерендерится на событиях add/remove/reset/etc

• Атрибут childView, который автоматически инстанциируется и свяжется с model

Page 16: MarionetteJS. Shall we dance?

COLLECTION VIEWS

Page 17: MarionetteJS. Shall we dance?

Marionette.CompositeView

• CompositeView = CollectionView + template

• Комбинация ItemView и CollectionView

• Рендерит элементы Backbone.Collection внутри wrapper

• Наследует Marionette.CollectionView

Page 18: MarionetteJS. Shall we dance?

MODEL EVENTS & COLLECTION EVENTS

Page 19: MarionetteJS. Shall we dance?

ЗОМБИ-АПОКАЛИПСИС

Page 20: MarionetteJS. Shall we dance?
Page 21: MarionetteJS. Shall we dance?

REGION

• Вью, предназначенное для управления жизненным циклом других вью

• Рендерит экземпляр вью и добавляет в DOM

• “Мост” между DOM и backbone

Page 22: MarionetteJS. Shall we dance?

ОТОБРАЖЕНИЕ ВЬЮ В РЕГИОНЕ

Page 23: MarionetteJS. Shall we dance?

LAYOUT

• Отличие от ItemView - содержит в себе регионы

• Хорошо подходит на роль “виджета” с несколькими вью

Page 24: MarionetteJS. Shall we dance?

LAYOUT

Page 25: MarionetteJS. Shall we dance?

BACKBONE.WREQR& BACKBONE.RADIO

Page 26: MarionetteJS. Shall we dance?

MESSAGING BUS

•Event события уровня приложения

•Commands исполнение команд

•Request/Response запрос определенных значений/состояний

Page 27: MarionetteJS. Shall we dance?

EVENT AGGREGATOR• pub/sub

• trigger/bind

• Оповещение о событии разных частей приложения (“user :logged-in”)

• События уровня приложения близки к глобальным вызовам функций

• Различные типы событий, пространства имен определяют семантику

Page 28: MarionetteJS. Shall we dance?

EVENT AGGREGATOR

Page 29: MarionetteJS. Shall we dance?

COMMANDSПрименяются для обеспечения функциональности, которая обрабатывается в одной точке, но возникает в разных точках

• Подписаться на исполнение команды - один раз

• Пример: сохранение

• cmd-s

• Clicking a toolbar button

• Choosing File => Save from the menubar

Page 30: MarionetteJS. Shall we dance?

COMMANDS

Page 31: MarionetteJS. Shall we dance?

REQUEST / RESPONSE• Применяется, когда нам нужно запросить информацию от другой части приложения

• Для данных уровня приложения (например, состояние корзины пользователя)

• Отличие от Events - намерение. Событие возникает как есть, а Request запрашивает специфичную информацию

• Исполняет запрос один подписчик

• Легко злоупотребить, как и в случае с другими глобальными объектами

Page 32: MarionetteJS. Shall we dance?

REQUEST / RESPONSE

// Set up an object to reply to a request. In this case, // whether or not its visible. myObject.reply('visible', this.isVisible);

// Get whether it's visible or not. var isViewVisible = myObject.request('visible');

Page 33: MarionetteJS. Shall we dance?

Backbone.Radio.channel

// Get a reference to the channel named 'user' var userChannel = Backbone.Radio.channel('user');

userChannel.on('some:event', function() { console.log('An event has happened!'); });

userChannel.reply('some:request', 'food is good');

userChannel.trigger('some:event');

Объединение Backbone.Events and Radio.Requests

Page 34: MarionetteJS. Shall we dance?

ИТОГО

Page 35: MarionetteJS. Shall we dance?

Управление Views:• Дочерние views - Backbone.BabySitter

• Marionette.Region. Содержит html элемент и умеет в него вставлять содержимое других view

• Marionette.RegionManager

• Marionette.TemplateCache

Marionette.Application

Marionette.AppRouter

Шина сообщений:• Application.vent - экземпляр Backbone.Wreqr.EventAggregator. pub/sub.

• Application.commands - экземпляр Backbone.Wreqr.Commands. Подписаться на исполнение команды - 1 раз

• Application.reqres - экземпляр Backbone.Wreqr.RequestResponse. Исполняет запрос только один подписчик

Page 36: MarionetteJS. Shall we dance?

ПОЛЕЗНОЕ

MarionetteJS.org (Derick Bailey)BackboneRails.com (Brian Mann)

“Marionette: gentle introduction” by David Sulc

Page 37: MarionetteJS. Shall we dance?

СПАСИБО ЗА ВНИМАНИЕ!