我设置了一个看似有效的Backbone路由器 - 路由被正确触发,视图更新等等。但是,当我按下浏览器的“后退”按钮时,根本不会触发路由。此外,在浏览器中键入URL也不会触发路由器。我是否缺少将浏览器特定内容绑定到Backbone(Firefox 11)的步骤。
设置
var messageRouter = new MessageRouter({view: messageListView});
Backbone.history.start();
触发
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) {
}
});
答案 0 :(得分:1)
您应该使用您已定义的相同路径呼叫路由器 .navigate。即:
<强>触发强>
messageRouter.navigate("/view/" + $(this).data("filter-type"), {trigger: true});
<强>路由器强>
routes : {
"" : "default",
"/view/:filter" : "filter",
"camera" : "camera"
},
答案 1 :(得分:1)
这可能是默认这个词,因为它是一个保留字。
在MessageRouter中的键'default'周围加上引号,或者在其他地方调用它,比如'defaultRoute'。
'default': function() {},
defaultRoute: function() {}
http://jsfiddle.net/uwjDq/2/ - 在这里工作正常,包括使用后退按钮。
答案 2 :(得分:1)
这可能为时已晚......但我遇到了完全相同的问题,事实证明我意外地解除了来自window对象的所有事件的绑定,并且Backbone历史记录正在监听窗口上的事件