骨干路由器无法遵守trigger = false选项

时间:2012-06-26 10:43:40

标签: jquery backbone.js backbone-routing

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

  

每当您在应用中找到要保存为网址的点时,请致电navigate以更新网址。如果您还想调用路由功能,请将trigger选项设置为true。要更新网址而不在浏览器的历史记录中创建条目,请将replace选项设置为true

因此,简单地调用appRouter.navigate('page');可能会将URL更改为www.myapp.com/page而不会触发相应的路由。但是,我发现我的路由器重定向到URL 并且还触发了页面路由,尽管默认情况下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选项。这是实施中的错误,还是我误解了什么?

2 个答案:

答案 0 :(得分:2)

自6/28/12更新到最新版本的Backbone(https://github.com/documentcloud/backbone上的主版本)可以解决此问题。

答案 1 :(得分:0)

pushState: true取消Backbone.history.start并使用原始navigate电话进行尝试。

我搜索了解决方案,但我得到的只是关于历史API pushState: true的模糊评论,导致Backbone路由器的导航功能无法正常工作。关于我的谷歌搜索this文章的一个例子是关于我能找到的问题的最佳资源。