О marionette.js

Backbone.Marionette это составная библиотека для Backbone, позволяющая упростить разработку крупных Javascript-приложений. Это набор общих паттернов разработки приложений, которые были найдены Дериком Бейли при разработке приложений на Backbone.

Архитектура приложения на строительных блоках Backbone

Backbone предоставляет отличный набор строительных блоков для ваших Javascript-приложений. Backbone дает основные конструкции, которые необходимы для разработки небольших приложений, управления событиями DOM или создания одностраничных приложений, которые поддерживают мобильные устройства и крупные корпоративные решения. Но Backbone это не полноценный фреймворк. Это только набор строительных блоков. Backbone перекладывает на разработчика большую часть работы по архитектуре приложения и его масштабируемости, включая управление памятью, представлениями и другим.

Marionette привносит в Backbone архитектуру приложения вместе с встроенным управлением представлениями и памятью. Marionette создана быть легкой и гибкой библиотекой инструментов над Backbone, предоставляющей фреймворк для разработки масштабируемого приложения.

Так же как и с Backbone, вы не обязаны использовать абсолютно все строительные блоки Marionette только потому, что вам нужна часть из них. Вы можете использовать только те части библиотеки, какие вам нужны. Это позволит вам работать с другими плагинами и фреймворками для Backbone. Это так же говорит о том, что вам нет необходимости заниматься переносом всего приложения на Marionette.

Ключевые преимущества

  • Масштабируемость: приложения строятся на модулях и событийной архитектуре;
  • Предустановленные инструменты: для рендеринга представлений используются шаблоны Underscore;
  • Легко модифицируется под специфичные нужны вашего приложения;
  • Уменьшение шаблонного кода для представлений за счет введения специализированных типов представлений;
  • Построена на модульной архитектуре с объектом Application и модулями, которые присоединены к нему;
  • Формируйте внешний вид вашего приложения в процессе выполнения с помощью объектов Region и Layout;
  • Вложенные представления и макеты внутри видимых частей приложения;
  • Встроенное управление и очистка памяти в представлениях, регионах и макетах;
  • Событийная архитектура с Backbone.Wreqr.EventAggregator;
  • Гибкая архитектура, позволяющая выбрать и использовать только то, что вам нужно;
  • И многое, многое другое

Из чего состоит marionette.js

Представления

  • Marionette.ItemView: Представление, предназначенное для рендеринга одного элемента (например, из коллекции);
  • Marionette.CollectionView: Представление, которое проходит по всем моделям коллекции и рендерит для каждой модели ее собственный ItemView (это представление не имеет собственного шаблона);
  • Marionette.CompositeView: Представление, предназначенное для рендеринга составных/древовидных иерархий. По сути это collectionView, но с собственным шаблоном.
  • Marionette.Layout: Представление, которое рендерит макет и создает для него менеджер регионов.
  • Marionette.View: Базовый типа представления, который наследуется остальными типами представлений. Не предназначен для непосредственного использования.

Поведения

  • Marionette.Behavior: Изолированный слой взаимодействия представлений, который может быть использован в любом view. В этот слой может быть вынесен общий функционал части представлений.
  • Marionette.Behaviors: Вспомогательный класс, предназначенный для применения поведений в ваших представлениях.

Управление представлениями

  • Marionette.Region: Управление видимыми частями вашего приложения, включая отображение и удаление их содержимого.
  • Marionette.RegionManager: Управление группой связанных регионов.
  • Marionette.Renderer: Объект, который единым образом рендерит шаблоны, как с данными, так и без них.
  • Marionette.TemplateCache: Кеширование шаблонов, которые хранятся в блоках <script>, для быстрого доступа к ним.
  • [→] Backbone.BabySitter: Управление представлениями-потомками для вашего Backbone.View (и других родителей).

Инфраструктура приложения

  • Marionette.Application: Объект, который запускает ваше приложение с помощью инициализаторов и прочего.
  • Marionette.Module: Объект, который создает модули и подмодули в вашем приложении.
  • Marionette.Controller: Объект общего назначения, который используется для управления модулями, роутерами, представлениями. Реализован на основе паттерна медиатор (посредник).

Инфраструктура обмена сообщениям

  • Marionette.Commands: Расширение Backbone.Wreqr.Commands, инструмент для выполнения команд.
  • Marionette.RequestResponse: Расширение Backbone.Wreqr.RequestResponse, инструмент для выполнения запросов и получения ответов на них.
  • [→] Backbone.Wreqr.EventAggregator: Агрегатор событий, предназначенный для работы событийной архитектуры. Является часть набора шаблонов обмена сообщениями.
  • [→] Backbone.Wreqr.Commands: Система выполнения команд.
  • [→] Backbone.Wreqr.RequestResponse: Система выполнения запросов и получения ответов на них.

Другое

  • Marionette.AppRouter: Объект, который позволяет убрать из роутеров логику, оставив в них только конфигурацию, задающую для каждого роута свой метод обработчик.
  • Marionette.Callbacks: Объект, который управляет набором коллбеков и выполняет их по требованию.
  • Marionette.functions: Набор хелперов и утилит, предназначенных для применения базового функционала Marionette в ваших объектах.

Устаревшее

  • [→] Backbone.EventBinder: Устарел для версии Backbone v0.9.9 и выше. Инструмент для более простой работы с событиями в Backbone v0.9.2.

Исходный код и загрузка

Последнюю версию (в том числе и amd-сборки) вы можете скачать с официального сайта или из папки lib репозитория на github.com.

В дополнение к существующей документации исходный код marionette.js был прокомментирован.

Доступные пакеты

Marionette.js неофициально доступна в различных пакетных менеджерах, таких как RubyGems, Node Package Manager, Nuget и других. Пакеты для этих систем поддерживаются сообществом и не являются частью ядра Backbone.Marionette. Посмотреть список доступных пакетов можно тут.

Совместимость и требования

На данный момент для работы marionette.js требуются следующие библиотеки:

Использовать иные версии перечисленных выше библиотек вы можете только на свой страх и риск.

Не смотря на то, что существует совместимость с Zepto.js и Ender.js, официально тестирование совместимости с ними не проводилось.

Сообщество

Copyright (c) 2012 Derick Bailey; Muted Solutions, LLC

Распространяется под лицензией MIT.