Marionette.Controller
Внимание: не рекомендуется к использованию.
Класс Controller считается устаревшим и не рекомендуется к использованию. Вместо него следует использовать простой javascript-объект, каждый метод которого будет соотвествовать конкретному роуту из AppRouter.
Класс Controller
это объект, который предназначен для использования с классом AppRouter
. Экземпляр класса Controller
служит для хранения методов-обработчиков роутов из экземпляра класса AppRouter
.
Содержание
- Основное применение
- Метод
mergeOptions
- Метод
getOption
- Удаление контроллера
- Преимущественное использование
Основное применение
Controller
предназначен исключительно для использования в роутере.
// Создаем контроллер и указываем обработчики для роутера.
var MyController = Marionette.Controller.extend({
home: function() {},
profile: function() {}
});
// Создаем экземпляр контроллера
var myController = new MyController();
// Передаем экземпляр в конструктор роутера
var myRouter = new Marionette.AppRouter({
controller: myController,
appRoutes: {
"home": "home",
"profile": "profile"
}
});
Метод mergeOptions
Метод копирует ключи из объекта options
непосредственно в сам экземпляр класса Controller
. Это наиболее предпочтительный способ доступа к параметрам, переданным в Controller
.
Более подробно об этом методе читайте тут.
Метод getOption
Метод позволяет получить значение свойства контроллера. Это свойство может принадлежать как самому контроллеру непосредственно, так и быть вложенным в свойстве this.options
контроллера. Если запрашиваемое свойство сущестует и в контроллере и в this.options
, то метод вернет значение из this.options
.
Более подробно об этом методе читайте тут.
Удаление контроллера
Каждый экземпляр контроллера имеет встроенный метод destroy
,
который удаляет все обработчики событий, присоединенные к экземпляру контроллера,
а также те, которые были навешаны с помощью EventBinder
.
Вызов метода destroy
запустит события “before:destroy” и “destroy” и вызовет
соответствующие методы onBeforeDestroy
и onDestroy
. В эти методы будут переданы
аргументы, с которыми был вызван метод destroy
:
// Объявляем контроллер с методом onDestroy
var MyController = Marionette.Controller.extend({
onBeforeDestroy: function(arg1, arg2){
// код в этом месте будет выполнен до выключения контроллера
}
onDestroy: function(arg1, arg2){
// код в этом месте будет обрабатывать выключение контроллера
}
});
// Создаем экземпляр контроллера
var myController = new MyController();
// Добавляем несколько обработчиков событий
myController.on("before:destroy", function(arg1, arg2){ ... });
myController.on("destroy", function(arg1, arg2){ ... });
myController.listenTo(something, "bar", function(){...});
// Выключаем контроллер: отписываемся от всех событий,
// вызываем событие "destroy" и метод onDestroy
myController.destroy(arg1, arg2);
Приоритетное использование
До версии 2.1 контроллер использовался иначе. Контроллер был объектом общего назначения, с помощью которого можно было создавать свои сущности. Это сбивало с толку, поскольку он так же использовался и в роутере. Кроме того, сам термин контроллер
ошибочно ассоциировался с контроллером из паттерна MVC.
Начиная с версии 2.1, для общего назначения был создан новый класс Marionette.Object
.
Рекомендуется использовать именно этот новый класс вместо контроллера во всех случаях, за исключением роутера.