Backbone JS Routing не работает, как я ожидаю - PullRequest
6 голосов
/ 06 марта 2012

Я думаю, что мне не хватает некоторых основ функций маршрутизации Backbone.

Я создаю приложение, и оно выглядит примерно так:

file: app.js

App = {}
App.nav = new Backbone.Router;
require('app/controller');

file: controller.js

App.nav.route('home', 'home', function () {
    console.log("Home Activated");
});

App.navigate('home');

В этот момент браузер изменяет URL-адрес в адресной строке на /home, но ничего не происходит, и я не получаю Home Activated консольное сообщение.

Я пытался использовать свой собственный класс маршрутизации (например, Backbone.Router.extend({})), но я не вижу в этом смысла, поскольку мне все еще нужно его инициализировать, и я хочу использовать центральную историю / навигацию в своем приложении что все модули / контроллеры добавляют маршрутизацию к нему, а не создают маршрутизатор для каждого контроллера.

Что я делаю не так?

Ответы [ 3 ]

15 голосов
/ 07 марта 2012

http://documentcloud.github.com/backbone/#Router-navigate

Из документации:

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

Но, как писал OlliM, сначала нужно активировать историю!

Итак, ваш ответ должен быть:

Backbone.history.start();
App.nav.navigate('home', {trigger: true});

редактирование: забыл поставить "нав"

6 голосов
/ 06 марта 2012

Чтобы маршрутизация работала, вам нужно позвонить Backbone.history.start() после настройки маршрутов (в основном после того, как вы сделали все остальное). Смотри: http://documentcloud.github.com/backbone/#History-start

1 голос
/ 04 апреля 2017

Я просто хочу указать на это, поскольку это спасло меня от боли и душевной боли.

Если вы перенаправляете на пользовательскую страницу, такую ​​как

Backbone.router.navigate('/some/page'); // does not work

И, похоже,не работатьДобавить трейлинг '/'

Backbone.router.navigate('/some/page/'); // works

Это стоило мне нескольких часов устранения неполадок ...

...