回溯历史记录时未执行初始路线

时间:2013-08-23 08:22:51

标签: backbone.js backbone-routing

我的路由器定义与以下类似(为了演示目的而大大简化):

var MyRouter = Backbone.Router.extend({
    routes: {
        '': 'search',
        'directions': 'directions',
        'map': 'map'
    },
    search: function () {
        // do something
    },
    directions: function () {
        // do something
    },
    map: function () {
        // do something
    },
    initialize: function () {
        this.listenTo(myModel, 'change', this.updateNavigation);
        Backbone.history.start({ pushState:true });
    },
    updateNavigation: function () {
        var selected = myModel.get('selected');
        this.navigate(selected);
    }
});

历史记录条目都是通过updateNavigation调用正确创建的,当我点击后退按钮返回我生成的历史记录时,每个条目的路径都会触发,直到我到达最初的条目。此时,即使URL已使用该历史记录条目进行更新,也不会触发应该解释该URL的路径。知道这里可能会发生什么吗?我是否对历史如何运作做出了一些错误的假设?

编辑:

似乎我得到了不一致的结果 - 它并不总是只是初始条目没有执行,有时在我第一次回到历史记录之后的任何事情。也就是说,我点击后退按钮一次,网址发生变化,路线正常点火。我再次点击它,网址改变,路线不开火。这让我有些不对劲,但我没有任何线索。

3 个答案:

答案 0 :(得分:0)

不要问我为什么,但是当我不触发时,我的浏览器后退按钮似乎无法正常工作:@navigate时为真。

答案 1 :(得分:0)

我非常简短的假设是Backbone.history.start({ pushState:true });在错误的地方使用。

据我所知,骨干历史记录应该在创建路由器实例之后开始。像,

var router = new MyRouter();
Backbone.history.start({ pushState:true });

答案 2 :(得分:0)

我发现了这个问题。我正在使用查询字符串并根据应用程序中的操作更新查询字符串。每次修改查询字符串时,我都添加了另一个历史记录条目,但历史记录条目的实际路径部分并不总是会改变。 Backbone不会根据相同的路由做任何不同的事情但是使用不同的查询字符串,所以我不得不放弃使用查询字符串而只是制作宁静的网址。一旦我这样做,历史就可以了。