Магистральный маршрутизатор - кнопка обратного вызова браузера, а не триггерные маршрутизаторы
У меня установлен базовый маршрутизатор, который, похоже, работает - маршруты запускаются должным образом, обновляются просмотры и т.д. Однако, когда я нажимаю кнопку "Назад" браузера, маршруты не запускаются вообще. Кроме того, ввод URL-адреса в браузер не запускает маршрутизаторы. Есть ли какой-то шаг, который мне не хватает, чтобы привязать конкретные вещи браузера к Backbone (Firefox 11).
Настройка
var messageRouter = new MessageRouter({view: messageListView});
Backbone.history.start();
Trigger
Backbone.history.navigate("#/view/" + $(this).data("filter-type"), {trigger: true});
Код маршрутизатора
var MessageRouter = Backbone.Router.extend({
view : null, /* should always be overridden */
initialize : function(options)
{
this.view = options.view;
},
routes : {
"" : "default",
"/view/:filter" : "filter",
"camera" : "camera"
},
default : function() {
},
filter : function(filterString) {
this.view.setFilter(filterString);
this.view.rerender();
},
camera : function(cameraString) {
}
});
Ответы
Ответ 1
Вы должны назвать маршрутизатор.navigate, используя тот же путь, который вы уже определили. то есть:
триггер
messageRouter.navigate("/view/" + $(this).data("filter-type"), {trigger: true});
маршрутизатор
routes : {
"" : "default",
"/view/:filter" : "filter",
"camera" : "camera"
},
Ответ 2
Это может быть слово default, которое испортило его как зарезервированное слово.
Либо поставить кавычки вокруг ключа "по умолчанию" в MessageRouter, либо называть его чем-то другим, например "defaultRoute".
'default': function() {},
defaultRoute: function() {}
http://jsfiddle.net/uwjDq/2/ - Здесь работает ОК, включая кнопку "Назад".
Ответ 3
это может быть слишком поздно.. но у меня была одна и та же проблема, и оказалось, что я случайно отменил все события из объекта window, и эта история с базой данных прослушивала события в окне