【问题标题】:Backbone router failing to respect trigger=false option骨干路由器未能遵守 trigger=false 选项
【发布时间】:2012-06-26 10:43:40
【问题描述】:

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

每当您在应用程序中到达想要另存为 URL 的点时,请调用 navigate 以更新 URL。如果您还想调用路由函数,请将trigger 选项设置为true。要更新 URL 而不在浏览器历史记录中创建条目,请将 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 选项。这是实现中的错误,还是我误解了什么?

【问题讨论】:

  • 它与trigger: false 设置是否正常工作?
  • @jakee:不,window.app.navigate('page', {trigger: false, replace: true}); 仍然产生相同的行为。和window.app.navigate('page');一样。
  • Backbone.history.start 中去掉pushState: true,然后用原来的navigation 调用试试。我用谷歌搜索了一下,pushState: truenavigate 之间可能存在联系,无法正常工作。
  • 做到了。它正确导航到#page,同时仅触发主路由。谢谢!不过,我真的很想将它与pushState: true 一起使用。这实际上是实现中的错误吗?
  • 我不知道,从 2011 年开始,我的谷歌搜索对此只产生了模糊的评论,我不得不自己修补它。我认为这与 js history api 中的 pushState 实现有关。但我会添加一个答案,如果你愿意,你可以接受。

标签: jquery backbone.js backbone-routing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Backbone.history.start 中去掉pushState: true 并尝试使用原来的navigate 调用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多