Backbone.js не будет перенаправлять на тот же URL, что и текущий - PullRequest
4 голосов
/ 29 февраля 2012

Я столкнулся с проблемой навигации / маршрутизации URL. Скажем, к примеру, я в настоящее время на #contact/new и снова я запрашиваю тот же URL-адрес, после чего соответствующая функция не вызывается. Мне нужно изменить URL, например, #contact/edit, а затем нажать #contact/new работает. Маршрутизация URL с того же URL - это проблема сейчас?

Ответы [ 4 ]

2 голосов
/ 16 декабря 2013

Я решил эту проблему, заранее вызвав тихую навигацию к корню:

var url = window.location.pathname.substr(Backbone.history.root.length);
this.navigate('/', { trigger: false });
this.navigate(url, { trigger: true });

Имейте в виду, что это создаст дополнительную запись в истории, но в моем случае это не такважный.

Вы также можете заставить это работать без записи истории, изменив свойство fragment объекта Backbone.history, но это свойство должно быть приватным, поэтому я подумал бы дважды, прежде чем дурачитьсяс ним:)

Свойство фрагмента - это то, что используется для сопоставления текущего URL-адреса с URL-адресом, который передается в функцию навигации, и поэтому маршрут будет выполняться, если они не совпадают.

1 голос
/ 30 августа 2012

Я тоже пытался разобраться с этой проблемой. Моя последняя попытка состояла в том, чтобы добавить функцию, которая добавляет поле временной отметки к ссылке, а затем вызывает функцию навигации:

var AppRouter = Backbone.Router.extend({...});

var app_router = new AppRouter;

function LoadLink(Link) {
  var Timestamp = new Date().getTime();
  app_router.navigate("#/" + Link + "/ts_" + Timestamp);
}

Этот метод позволяет мне иметь ссылку, по которой можно щелкать несколько раз, однако теперь я должен учитывать временную метку при настройке маршрутов. Это может вернуться, чтобы укусить меня позже. (

1 голос
/ 16 октября 2012

Я знаю, что опаздываю на вечеринку, но я решил похожую проблему с помощью функции навигации.

Попробуйте что-то вроде:

this.navigate("#contact/edit", {trigger: false, replace: true});

Что меняет URL-адрес, который, по мнению маршрутизатора, он # связывает / редактирует, фактически не вызывая действие.

1 голос
/ 12 апреля 2012

У меня та же проблема.Маршрутизация одного и того же URL-адреса example.com/#/new (вызов одного и того же URL-адреса дважды) не приведет к запуску маршрута.Я создал обходной путь, меняя URL после каждой маршрутизации:

var url = window.location.href;
url = url.substring(0,url.indexOf('#')) + '#/';
window.location.replace(url);

или проще:

window.location.hash = '#/';

Но это решение мне кажется немного грязным.

...