Marionette.RegionManager
Менеджеры регионов предоставляют согласованный способ управления
несколькими объектами Marionette.Region
в приложении.
RegionManager
предназначен для использования в других объектах,
он облегчает добавление, хранение, поиск и удаление регионов из этих объектов.
Для примера того, как менеджер регионов может быть использован, можно посмотреть реализацию
объектов Marionette.Application и Marionette.LayoutView.
Содержание
- Основное применение
- Constucting
- RegionManager.addRegion
- RegionManager.addRegions
- RegionManager.get
- RegionManager.getRegions
- RegionManager.removeRegion
- RegionManager.removeRegions
- RegionManager.emptyRegions
- RegionManager.destroy
- События RegionManager-а
- Итераторы RegionManager-а
Основное применение
Экземпляр RegionManager
-а может быть создан напрямую, а для добавления
и удаления регионов используются специальные методы:
var rm = new Marionette.RegionManager();
var region = rm.addRegion("foo", "#bar");
var regions = rm.addRegions({
baz: "#baz",
quux: "ul.quux"
});
regions.get('baz').show(myView);
rm.removeRegion("foo");
Создание экземпляра класса
RegionManager
копирует region
из опций конструктора в экземпляр класса. Либо, регионы можно передать
напрямую в экземпляр, используя addRegions
метод.
var mananger = new Marionette.RegionManager({
regions: {
"aRegion": "#bar"
}
});
mananger.get('aRegion').show(new MyView);
RegionManager.addRegion
Регионы могут добавляться по отдельности с помощью метода addRegion
.
Этот метод принимает два параметра: название региона и определение региона.
var rm = new Marionette.RegionManager();
var region = rm.addRegion("foo", "#bar");
В этом примере, регион названый “foo” будет добавлен в экземпляр менеджера регионов RegionManager
.
Регион определен как jQuery-cелектор, который будет искать по #bar
соответствующий элемент в DOM.
Существует много других способов определить регион, в том числе в виде
литерал объекта с различными опциями, а также экземпляр объекта Region
.
Больше информации об этом можно узнать в документации по Marionette.Region.
RegionManager.addRegions
Регионы также могут быть добавлены пачкой (en-masse) с помощью метода addRegions
.
Этот метод принимает литерал объекта или функцию, которая возвращает литерал объекта.
Литерал объекта должен содержать названия регионов как ключи и определения регионов как значения.
Метод addRegions
возвращает литерал объекта со всеми созданными регионами.
var rm = new Marionette.RegionManager();
// С помощью литерал объекта
var regions = rm.addRegions({
main: '#main-content',
navigation: {
selector: '#navigation',
regionClass: MyNavRegion
}
});
// С помощью функции
var otherRegions = rm.addRegions(function(regionDefinition) {
return {
footer: '#footer'
};
});
regions.get('main'); //=> 'main' экземпляр региона
regions.get('navigation'); //=> 'navigation' экземпляр региона
otherRegions.get('footer'); //=> 'footer' экземпляр региона
Если вы передаете функцию в addRegions
, то она будет вызвана
с контекстом экземпляра объекта RegionManager
и со всеми аргументами,
переданными в addRegions
.
var rm = new Marionette.RegionManager();
var regionDefaults = {
regionClass: MyRegionClass
};
rm.addRegions(function(regionDefinition, defaults) {
console.log(this); // `rm` экземпляр объекта `RegionManager`
console.log(regionDefinition); // функция определения регионов
console.log(defaults); // объект `{ regionClass: MyRegionClass }`
// ...возвращает определение регионов в виде литерал объекта
}, regionDefaults);
Параметры по умолчанию в addRegions
При добавлении множества регионов может быть полезным
возможность задать параметры по умолчанию, которые будут передаваться
всем добавляемым регионам. Это может быть сделано с помощью
параметра defaults
. Задается этот параметр в виде литерал объекта
с парами ключ: значение
, которые будут передаваться в каждый добавляемый регион.
var rm = new Marionette.RegionManager();
var defaults = {
regionClass: MyRegionClass
};
var regions = {
foo: "#bar",
baz: "#quux"
};
rm.addRegions(regions, defaults);
В этом примере, все регионы будут добавлены как экземпляры объекта MyRegionClass
.
RegionManager.get
Экземпляр региона может быть получен у экземпляра объекта RegionManager
через вызов метода get
и передачей в этот метод названия региона.
var rm = new Marionette.RegionManager();
rm.addRegion("foo", "#bar");
var region = rm.get("foo");
RegionManager.getRegions
Метод getRegions
позволяет получить все регионы у менеджера регионов.
Этот метод возвращает литерал объекта с названиями регионов в качестве атрибутов.
var rm = new Marionette.RegionManager();
rm.addRegion("foo", "#foo");
rm.addRegion("bar", "#bar");
var regions = rm.getRegions();
regions.foo; //=> foo регион
regions.bar; //=> bar регион
RegionManager.removeRegion
Регион можно удалить, вызвав метод removeRegion
и передав в этот метод название региона.
var rm = new Marionette.RegionManager();
rm.addRegion("foo", "#bar");
rm.removeRegion("foo");
Регион имеет метод empty
, который будет вызван прежде, чем
регион будет удален из экземпляра объекта RegionManager
, а также перед вызовом
метода stopListening
.
RegionManager.removeRegions
Вы можете быстро удалить все регионы из экземпляра объекта RegionManager
,
вызвав метод removeRegions
.
var rm = new Marionette.RegionManager();
rm.addRegions({
foo: "#foo",
bar: "#bar",
baz: "#baz"
});
rm.removeRegions();
Этот метод очистит все регионы и удалит их.
RegionManager.emptyRegions
Вы можете быстро очистить все регионы у экземпляра объекта RegionManager
,
вызвав метод emptyRegions
.
var rm = new Marionette.RegionManager();
rm.addRegions({
foo: "#foo",
bar: "#bar",
baz: "#baz"
});
rm.emptyRegions();
Этот метод очистит регионы без удаления их из экземпляра объекта RegionManager
.
RegionManager.destroy
Экземпляр объекта RegionManager
может быть полностью уничтожен вызовом метода destroy
.
Этот метод уничтожит экземпляр объекта RegionManager
и
удалит все регионы из этого экземпляра объекта RegionManager
.
var rm = new Marionette.RegionManager();
rm.addRegions({
foo: "#foo",
bar: "#bar",
baz: "#baz"
});
rm.destroy();
События RegionManager-а
RegionManager
генерирует различные события в процессе своего использования.
Событие before:add:region
RegionManager
генерирует событие “before:add:region” перед тем,
как регион будет добавлен в менеджер регионов. Это позволяет вам
добавить выполнение некоторого действия для региона перед его добавлением.
var rm = new Marionette.RegionManager();
rm.on("before:add:region", function(name, region) {
// что-то делаем с экземпляром региона
});
rm.addRegion("foo", "#bar");
Событие add:region
RegionManager
генерирует событие “add:region”, когда регион
добавлен в менеджер регионов. Это событие позволяет вам сразу использовать
экземпляр региона или добавить регион в объект, который нуждается в ссылке на него:
var rm = new Marionette.RegionManager();
rm.on("add:region", function(name, region) {
// добавляем экземпляр региона в объект
myObject[name] = region;
});
rm.addRegion("foo", "#bar");
Событие before:remove:region
RegionManager
генерирует событие “before:remove:region” перед тем, как
регион будет удален из менеджера регионов. Это событие позволяет вам выполнить
любые операции очистки перед тем, как регион удалится.
var rm = new Marionette.RegionManager();
rm.on("before:remove:region", function(name, region) {
// сделать что-то с экземпляром региона
});
rm.addRegion("foo", "#bar");
rm.removeRegion("foo");
Событие remove:region
RegionManager
генерирует событие “remove:region”, когда регион
удален из менеджера регионов. Это событие позволяет вам использовать
экземпляр региона в последний раз или удалить регион из объекта,
который имеет на него ссылку:
var rm = new Marionette.RegionManager();
rm.on("remove:region", function(name, region) {
// удаляем экземпляр региона из объекта
delete myObject[name];
});
rm.addRegion("foo", "#bar");
rm.removeRegion("foo");
Итераторы RegionManager-а
RegionManager
имеет несколько методов для итерирования,
которые добавлены к нему от underscore.js
. Они работают также,
как и импортированные методы в Backbone.Collection
. Например,
вы можете легко перебрать всю коллекцию экземпляров регионов,
вызвав метод each
:
var rm = new Marionette.RegionManager();
rm.each(function(region) {
// здесь код, который делает что-то с экземпляром региона
});
Доступен следующий спиок underscore-методов: