Ответ 1
Router.navigate('about', true);
Таким образом вы можете вручную запустить маршрут.
Есть ли способ запуска такого же маршрута местоположения в backbone.js, например, когда местоположение /My/App/#/About
, и пользователь снова нажимает на якорь с тем же самым маршрутом, чтобы обновить содержимое страницы.
Router.navigate('about', true);
Таким образом вы можете вручную запустить маршрут.
Backbone.history.loadUrl(Backbone.history.fragment);
Решение для вашей конкретной проблемы на самом деле не задокументировано, и кажется, что предлагаемая наилучшая практика состоит в том, чтобы просто вызвать функцию, объявленную на маршруте, который вы хотите запустить:/
Ссылка: https://github.com/documentcloud/backbone/issues/1214
До сих пор другие ответы верны, но они забыли упомянуть, что если хэш-навигатор будет таким же, как текущий хеш, ничего не будет срабатывать.
Предполагая, что вы хотите сделать это не только на странице About, используйте:
route = Backbone.history.fragment;
yourRouter.navigate(route, true);
Поскольку маршрутизатор Backbone ищет изменения в фрагменте URL, который вы хотите загрузить, то для меня работало, чтобы перейти к '/' сначала без триггера, а затем к URL (фрагменту), который вы хотите нажать с помощью триггера, Вероятно, вы могли бы легко создать это в поведение маршрутизатора по умолчанию, если хотите.
например.
App.Routers.appRouter.navigate '/', {trigger: false}
App.Routers.appRouter.navigate myPath, {trigger: true}
Используя Backbone 0.9.2, вы передаете объект опций и установите "trigger" в "true".
router.navigate('some/route', { trigger : true });
Ссылка: http://documentcloud.github.com/backbone/#Router-navigate
Спасибо за предложение @eddywashere, действительно потрясающее. Я добавил небольшое редактирование, чтобы проверить, если вы находитесь на последнем (самый текущий) URL-адрес, и если да, загружает эту историю. Довольно просто, подумал, что это может помочь кому-то с той же проблемой.
$("[data-href]").on("click", function(e) {
var href;
e.preventDefault();
href = $(e.currentTarget).data("href");
if ((_.last(this.history)) === href) {
return Backbone.history.loadUrl(_.last(this.history));
} else {
return this.router.navigate(href, true);
}
});
Другой вариант: вы можете добавить параметр со случайным значением, поэтому хеш будет отличаться для каждого вызова, даже если вы вызываете одну и ту же страницу.
router.navigate(route, {trigger: false});//Изменяет URL, но он не будет запускаться... Ex: Вместо маршрута - 'about/1' или ' about 'и т.д.
Backbone.history.loadUrl(Backbone.history.fragment);//Здесь будет запущен измененный маршрут.