Backbone.Router является центральным компонентом для управления состоянием приложения и маршрутизацией URL. Его основная задача — сопоставление адресов страниц с действиями в приложении, что позволяет реализовать одностраничные приложения с навигацией без перезагрузки страницы.
Маршрутизатор создается путем расширения Backbone.Router
с определением маршрутов и соответствующих методов:
var AppRouter = Backbone.Router.extend({
routes: {
"": "home",
"about": "aboutPage",
"products/:id": "showProduct",
"*path": "defaultRoute"
},
home: function() {
console.log("Главная страница");
},
aboutPage: function() {
console.log("Страница о нас");
},
showProduct: function(id) {
console.log("Просмотр продукта с ID:", id);
},
defaultRoute: function(path) {
console.log("Маршрут не найден:", path);
}
});
Ключевые моменты:
routes — объект, где ключи представляют шаблоны URL, а
значения — имена методов, которые вызываются при совпадении
маршрута.:param.* выступают как универсальные
обработчики для любых совпадений.Для активации маршрутов необходимо создать экземпляр и запустить историю браузера:
var router = new AppRouter();
Backbone.history.start();
Особенности:
Backbone.history.start() отслеживает изменения URL и
инициирует соответствующие методы маршрутизатора.#),
так и pushState, если требуется работа с “красивыми” URL
без хэша:Backbone.history.start({ pushState: true });
pushState сервер должен быть
настроен на возврат одной страницы для всех внутренних маршрутов.Для программного изменения маршрута используется метод
navigate:
router.navigate("products/42", { trigger: true });
Параметры:
trigger: true — вызывает соответствующий метод
маршрута.replace: true — заменяет текущую запись в истории
вместо создания новой.Пример:
router.navigate("about", { trigger: true, replace: false });
Маршруты могут содержать переменные сегменты:
routes: {
"user/:userId/posts/:postId": "showUserPost"
},
showUserPost: function(userId, postId) {
console.log("Пользователь:", userId, "Пост:", postId);
}
Использование универсального маршрута с *path позволяет
обрабатывать ошибки или перенаправления:
routes: {
"*path": "notFound"
},
notFound: function(path) {
console.log("Страница не найдена:", path);
}
Маршрутизатор часто используется для управления отображением
Backbone.View. Пример:
var HomeView = Backbone.View.extend({
render: function() {
this.$el.html("<h1>Главная страница</h1>");
return this;
}
});
var router = new AppRouter({
routes: {
"": "home"
},
home: function() {
var view = new HomeView({ el: "#app" });
view.render();
}
});
Маршруты могут быть сложными и определяться через регулярные выражения:
var router = Backbone.Router.extend({
routes: {},
initialize: function() {
this.route(/^search\/(\w+)$/, "search", this.search);
},
search: function(query) {
console.log("Поиск по запросу:", query);
}
});
route позволяет задавать маршрут
программно, что даёт гибкость при сложных шаблонах
URL.Backbone.Router поддерживает события, которые можно использовать для централизованного отслеживания навигации:
route — вызывается при срабатывании маршрута.route:[name] — событие для конкретного маршрута.all — срабатывает на все события маршрутизации.Пример:
router.on("route:showProduct", function(id) {
console.log("Событие маршрута: просмотр продукта", id);
});
Backbone.Router обеспечивает мощный, но простой механизм маршрутизации, интегрированный с событиями и представлениями, позволяя строить одностраничные приложения с чистой архитектурой и управлением состоянием через URL.