13

我设置了一个看似有效的主干路由器 - 路由被正确触发,视图更新等。但是,当我按下浏览器的“返回”按钮时,根本不会触发路由。此外,在浏览器中输入 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) {
    }

});
4

3 回答 3

1

这可能为时已晚..但我遇到了完全相同的问题,结果我不小心从窗口对象中解除了所有事件的绑定,并且主干历史正在侦听窗口上的事件

于 2014-06-12T13:50:57.880 回答
1

您应该使用已定义的相同路径调用router .navigate。IE:

扳机

messageRouter.navigate("/view/" + $(this).data("filter-type"), {trigger: true});

路由器

 routes : {
        "" : "default",
        "/view/:filter" : "filter",
        "camera" : "camera"
    },
于 2012-05-15T18:05:52.010 回答
1

它可能是单词 default 搞砸了,因为它是一个保留字。

要么在 MessageRouter 中的键 'default' 周围加上引号,要么将其称为其他名称,例如 'defaultRoute'。

'default': function() {},
defaultRoute: function() {}

http://jsfiddle.net/uwjDq/2/ - 在这里似乎可以正常工作,包括使用后退按钮。

于 2012-12-13T15:22:04.193 回答