我有以下路由器:
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),我发现它不支持我想要做的但是有一些方法可以实现这个目标吗?
答案 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();