骨干路由器不触发路由

Gav*_*ulz 6 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);
  },
  ....
};
Run Code Online (Sandbox Code Playgroud)

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

appRouter.navigate('inbox', {trigger: true});
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*cke 4

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

var vent = _.extend({}, Backbone.Events);
Run Code Online (Sandbox Code Playgroud)

然后在您的路由器中对收件箱路由执行以下操作:

vent.trigger('inbox:show', page);
Run Code Online (Sandbox Code Playgroud)

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

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

另外,从该处理程序中,您可以在appRouter.navigate('inbox');不传递 true 的情况下进行调用。现在,您可以让应用程序达到您想要的状态,而无需尝试强制路由。