Маршрутизатор Marionette.AppRouter
Уменьшите объём кода для обработки событий маршрутов и вызова единственного метода в другом объекте. Настройте маршрутизаторы таким образом, чтобы они напрямую вызывали метод вашего объекта.
Индекс документации
- Настройка маршрутов
- Настройка маршрутов в конструкторе
- Добавление маршрутов во время выполнения
- Указание контроллера
- onRoute
Настройка маршрутов
Настройте AppRouter с appRoutes. Определение маршрута передаётся стандартным обработчикам маршрутизации Backbone. Это означает, что вы определяете маршруты, как обычно. Однако вместо того, чтобы предоставлять метод обратного вызова, существующий в маршрутизаторе, вы предоставляете метод обратного вызова, существующий в контроллере, который вы указываете для экземпляра маршрутизатора (см. ниже).
var MyRouter = Marionette.AppRouter.extend({
// "someMethod" must exist at controller.someMethod
appRoutes: {
"some/route": "someMethod"
},
/* standard routes can be mixed with appRoutes/Controllers above */
routes : {
"some/otherRoute" : "someOtherMethod"
},
someOtherMethod : function(){
// do something here.
}
});
Вы также можете добавить стандартные маршруты в AppRouter с методами в маршрутизаторе.
Настройка маршрутов в конструкторе
Маршруты также можно определить через параметры функции конструктора.
var MyRouter = new Marionette.AppRouter({
controller: myController,
appRoutes: {
"foo": "doFoo",
"bar/:id": "doBar"
}
});
Это позволяет создавать экземпляры маршрутизатора без необходимости .extend из AppRouter. Вы можете просто создать экземпляр с определёнными в конструкторе маршрутами, как показано.
Добавление маршрутов во время выполнения
Помимо установки appRoutes для AppRouter, вы можете добавить маршруты приложения во время выполнения экземпляру маршрутизатора. Это выполняется с помощью вызова метода appRoute(). Он работает так же, как встроенный вызов router.route() из маршрутизатора Backbone, но имеет все те же семантику и поведение конфигурации appRoutes.
var MyRouter = Marionette.AppRouter.extend({});
var router = new MyRouter();
router.appRoute("/foo", "fooThat");
Также вы можете указать контроллер с несколькими маршрутами во время выполнения с помощью метода processAppRoutes. Однако в этом случае текущий контроллер AppRouter не изменится.
var MyRouter = Marionette.AppRouter.extend({});
var router = new MyRouter();
router.processAppRoutes(myController, {
"foo": "doFoo",
"bar/:id": "doBar"
});
Указание контроллера
AppRouter может использовать только один объект controller. Вы можете либо указать его напрямую в определении маршрутизатора:
var someController = {
someMethod: function(){ /*...*/ }
};
Marionette.AppRouter.extend({
controller: someController
});
… или в параметре конструктора:
var myObj = {
someMethod: function(){ /*...*/ }
};
new MyRouter({
controller: myObj
});
Объект, используемый как controller, не имеет требований, кроме того, что он будет содержать методы, указанные в appRoutes.
Рекомендуется делить ваши объекты контроллера на более мелкие части связанной функциональности и иметь несколько маршрутизаторов/контроллеров вместо одного большого маршрутизатора и контроллера.
onRoute
Если он существует, AppRouter вызовет метод onRoute всякий раз, когда пользователь переходит по вашему приложению. Метод обратного вызова получает три аргумента: имя, путь и аргументы маршрута.
© 2016 Muted Solutions, LLC
Licensed under the MIT License.
https://marionettejs.com/docs/v2.4.7/marionette.approuter.html