我使用backbone.marionette
制作了一个网络应用。从Marionette.ItemView
开始,我触发事件document.location.hash
:
document.location.hash = '#tasks/' + this.model.get('id');
1.a)它改变了URL 1.b)它触发了appRoutes
如果我从同一个地方触发Routing.navigate
:
router.navigate('#tasks/' + this.model.get('id'))
2.a)它按预期更改了URL 2.b)它不会触发appRoutes。
知道为什么2.b会发生吗?问题在哪里?
感谢。
var Router = Marionette.AppRouter.extend({
appRoutes: {
'tasks': 'tasks',
'tasks/:id': 'taskDetail',
'*defaults': 'tasks'
}
});
答案 0 :(得分:9)
您需要添加{trigger: true}
router.navigate('#tasks/' + this.model.get('id'), {trigger: true})
通常我会扩展路由器,然后添加我自己的导航,自动添加{trigger: true}
。我理解为什么开发人员这样做,但它不是我曾经使用它的方式:)