不调用骨干路由

Ach*_*ner 5 javascript backbone.js backbone-routing

我有一个使用Backbone 0.5.3的工作应用程序,它不再使用主干0.9.2.

我发现Router.navigate()由于某种原因没有调用我的路由.

这是我的路由器:

var Router = Backbone.Router.extend({
    routes: {
      '/mypage': 'mypage', 
    },

    mypage: function() { 
      // show page ...
   }
});
Run Code Online (Sandbox Code Playgroud)

像这样手动调用路由工作正常:

Router.mypage()
Run Code Online (Sandbox Code Playgroud)

我还试图覆盖骨干的.navigate方法来调试我的应用程序...

var Router = Backbone.Router.extend({
    routes: {
      '/mypage': 'mypage', 
    },

    navigate: function(fragment, options) {
      console.log("navigate called");
      Backbone.history.navigate(fragment, options);
    },

    mypage: function() { 
      // show page ...
   }
});
Run Code Online (Sandbox Code Playgroud)

......似乎.navigate被调用但是......

Backbone.history.navigate(fragment, options);
Run Code Online (Sandbox Code Playgroud)

......只是不打电话给路线.

我正在使用PushState,这是我的初始调用:

Backbone.history.start({ 
  root: '/',
  pushState: true,
  silent: true
});
Run Code Online (Sandbox Code Playgroud)

已经尝试过没有root和silent参数 - 没有成功.

再次:这使用Backbone 0.5.3.

感谢大家的回复!

阿希姆

mu *_*ort 2

来自精美手册

延长 Backbone.Router.extend(properties, [classProperties])

首先创建自定义路由器类。[...] 请注意,您需要避免在路由定义中使用前导斜杠:

我猜你只需要从你的 中删除前导斜杠routes,例如:

routes: {
  'mypage': 'mypage', 
},
Run Code Online (Sandbox Code Playgroud)

  • 哎呀!你是对的,只是仔细检查了我的路线,这解决了问题!顺便说一句:关于路由中前导斜杠的新行为在 0.9 版本的主干变更日志中提到[http://backbonejs.org/#changelog](http://backbonejs.org/#changelog) (2认同)