0

我有一个类似于以下定义的路由器(此处为演示目的大大简化了):

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 的路由不会触发。知道这里可能会发生什么吗?我是否对历史的运作方式做出了一些错误的假设?

编辑:

似乎我得到了不一致的结果 - 不总是不执行的初始条目,有时是我第一次回顾历史之后的任何内容。也就是说,我单击一次后退按钮,url 更改,路由正确触发。我再次点击它,网址更改,路线不触发。感觉我做错了什么,但我不知道。

4

3 回答 3

0

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

于 2013-08-23T10:41:49.333 回答
0

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

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

var router = new MyRouter();
Backbone.history.start({ pushState:true });
于 2013-08-23T11:04:06.830 回答
0

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

于 2013-08-31T00:08:35.163 回答