【问题标题】:Backbone Router - Browser Back Button Not Triggering Router Methods骨干路由器 - 浏览器后退按钮不触发路由器方法
【发布时间】:2012-05-10 08:20:31
【问题描述】:

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

});

【问题讨论】:

  • 通常我会在路由中不带“#”的情况下触发。你在触发脚本工作吗?另外,您的过滤器的内容是什么?你的路线都没有工作吗?尝试从“/view/:filter”路由中删除“/”。(总而言之,您的设置看起来不错 - 我猜某处存在语法错误......)

标签: backbone.js


【解决方案1】:

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

触发

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

路由器

 routes : {
        "" : "default",
        "/view/:filter" : "filter",
        "camera" : "camera"
    },

【讨论】:

    【解决方案2】:

    这可能是因为它是一个保留字,所以把它搞砸了。

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-01
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 2016-06-09
        • 1970-01-01
        • 2013-01-14
        相关资源
        最近更新 更多