5

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

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

这是我的路由器:

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

    mypage: function() { 
      // show page ...
   }
});

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

Router.mypage()

我还尝试覆盖主干的 .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 ...
   }
});

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

Backbone.history.navigate(fragment, options);

...只是不调用路线。

我正在使用 PushState,这是我最初的电话:

Backbone.history.start({ 
  root: '/',
  pushState: true,
  silent: true
});

已经在没有 root 和 silent 参数的情况下尝试过 - 没有成功。

同样:这适用于 Backbone 0.5.3。

感谢大家留下回复!

阿奇姆

4

3 回答 3

3

您必须为导航方法设置触发选项,例如:

Router.navigate("/mypath", {trigger: true})

于 2012-08-22T17:54:34.953 回答
2

来自精美手册

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

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

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

routes: {
  'mypage': 'mypage', 
},
于 2012-08-22T17:25:49.197 回答
0

您必须创建路由器实例。

var router = new Router();
router.navigate(...);
于 2012-08-22T09:13:50.247 回答