骨干路由器不触发路由

时间:2012-02-25 21:06:06

标签: javascript backbone.js

我有以下路由器:

appRouter = Backbone.Router.extend({
  routes: {
    '': 'inbox',
    'inbox': 'inbox',
    'discussions_engagement': 'contacts',
  },

  inbox: function(page) {
    console.log('inbox');
    var page = page || 1;
    engage.app.hydrateInbox(page, engage.app.showInbox);
  },
  ....
};

当我在http:// [...] / #inbox上时,我打电话给

appRouter.navigate('inbox', {trigger: true});

收件箱操作不会触发我想要实现的内容。现在我已经看过Backbone的来源(https://github.com/documentcloud/backbone/blob/master/backbone.js#L1027),我发现它不支持我想要做的但是有一些方法可以实现这个目标吗?

3 个答案:

答案 0 :(得分:4)

我会在您的engage.app对象中创建一个事件管理器,如下所示:

var vent = _.extend({}, Backbone.Events);

然后在路由器中为收件箱路由执行此操作:

vent.trigger('inbox:show', page);

并在engage.app对象中处理该事件,执行以前在路由处理程序中的代码。

现在,您可以触发相同的事件,而不是调用appRouter.navigate

此外,从该处理程序,您可以调用appRouter.navigate('inbox');而不传递true。现在,您可以将应用程序设置为所需的状态,而不必尝试强制路由。

答案 1 :(得分:2)

据我所知...截至Backbone 0.9.10使用appRouter.navigate('inbox', {trigger: true});按预期工作。

答案 2 :(得分:-1)

另一种选择就是调用方法

appRouter.inbox();