4

Backbone.js 为其 Backbone.router 对象提供了一个navigate(fragment, [options])方法,该方法执行以下操作(根据文档):

每当您在应用程序中到达要保存为 URL 的点时,调用navigate以更新 URL。如果您还想调用路由函数,请将trigger选项设置为true。要更新 URL 而不在浏览器的历史记录中创建条目,请将replace选项设置为true

因此,简单的调用appRouter.navigate('page');可能会在www.myapp.com/page不触发相应路由的情况下将 URL 更改为。但是,我发现我的路由器重定向到 URL并触发了 page route,尽管trigger=false默认情况下。

因此,以下代码:

$(function(){
var AppRouter = Backbone.Router.extend({

    routes: {
        '': 'home',
        'page': 'page',
    },

    home: function() {
        window.app.navigate('page', {replace: true});        
        console.log('home route');    
    },

    page: function () {
        console.log('page route');
    },

});

window.app = new AppRouter();
Backbone.history.start({pushState: true});
});

导航到 www.myapp.com 时产生以下控制台输出:

> home route
> page route

当预期的控制台输出应该只是:

> home route

该方法似乎违反了默认trigger选项。这是实现中的错误,还是我误解了什么?

4

2 回答 2

2

更新到 2012 年 6 月 28 日的 Backbone 的最新版本(https://github.com/documentcloud/backbone上的主版本)解决了这个问题。

于 2012-06-29T05:13:12.790 回答
0

取下来pushState: true,用原来的电话Backbone.history.start试试。navigate

我在谷歌上搜索了一个解决方案,但我得到的只是关于历史 APIpushState: true导致主干路由器的导航功能无法正常工作的模糊评论。以我的谷歌搜索为例,这篇被删除的文章是关于我能找到的关于此事的最佳资源。

于 2012-06-26T11:35:15.343 回答