Клиентская маршрутизация.Как это работает? - PullRequest
10 голосов
/ 21 ноября 2011

Мне нужно решение для маршрутизации на стороне клиента для работы с приложением Chrome.Я исследовал несколько и crossroads.js кажется подходящим.Когда я включаю его в мой HTML-файл, он, кажется, не работает;то есть, если я использую код, подобный

crossroads.addRoute('/news/{id}', function(id){  
  alert(id);  
});   
crossroads.parse('/news/123');

, страница выдаст предупреждение «123», но если я наберу «/ news / 321» в строке URL-адреса браузера, она будет выполнять действия браузера по умолчанию вместо предупреждения'321'.Что я делаю неправильно.(Кроме того, я понимаю, что заголовок является широким, но я считаю, что трудности, с которыми я сталкиваюсь с crossroads.js, являются более общими, чем crossroads.js в частности. Это приводится в качестве примера.)

Ответы [ 2 ]

8 голосов
/ 21 ноября 2011

Используйте также Hasher (того же автора).

Документация на странице Перекрестка говорит вам, что вам нужно использовать Hasher (потому что это будет использоваться для мониторинга панели widow.location.).

Таким образом, вам также нужно будет использовать Hasher и инициализировать его, затем вы можете добавить свои маршруты "Перекресток" в Hasher, чтобы начать мониторинг этих конкретных маршрутов.

//setup crossroads
crossroads.addRoute('foo');
crossroads.addRoute('lorem/ipsum');
crossroads.routed.add(console.log, console); //log all routes

//setup hasher
hasher.initialized.add(crossroads.parse, crossroads); //parse initial hash
hasher.changed.add(crossroads.parse, crossroads); //parse hash changes
hasher.init(); //start listening for history change

//update URL fragment generating new history record
hasher.setHash('lorem/ipsum');

http://millermedeiros.github.com/crossroads.js/

6 голосов
/ 03 мая 2013

Команда parse указывает перекрестку взглянуть на строку и выполнить действие на ее основе.

Так что в случае crossroads.parse('/news/123'); она всегда будет использовать /news/123.

Поскольку вы хотите, чтобы перекресток анализировал то, что у вас есть в адресной строке браузера, вам нужно использовать это значение в методе разбора:

crossroads.parse(document.location.pathname);
...