不调用骨干路由

时间:2012-08-22 09:00:43

标签: 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 ...
   }
});

手动调用路线可以正常工作:

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。

感谢大家的回复!

Achim的

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

来自fine manual

  

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

     

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

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

routes: {
  'mypage': 'mypage', 
},

答案 2 :(得分:0)

您必须创建路由器的实例。

var router = new Router();
router.navigate(...);