我希望我的Backbone.Router实例侦听像'#/ settings'和'#/ settings / privacy'这样的hashbang
目前我以这种方式处理这个问题:
var Router = Backbone.Router.extend({
routes: {
"settings": "settings",
"settings/:query": "settings"
},
settings: function(query) {
// do the routing
}
});
我现在只想在一条路线上完成这一切。不幸的是'settings /:query'只允许'settings /'
任何人都知道如何处理这个问题?
此致
答案 0 :(得分:1)
你有一些选择。如果您对#settings/
(请注意最终斜杠)和#settings/privacy
等路线感到满意,那么您可以使用此功能:
routes: {
'settings/*query': 'settings'
}
演示:http://jsfiddle.net/ambiguous/m7ufD/
这不适用于#settings
,但最终的斜线对于该路由起作用是必要的。
如果您没有#settings-something-else
之类的路线,那么您可以这样做:
routes: {
'settings*query': 'settings'
}
演示:http://jsfiddle.net/ambiguous/MudaG/
这也会匹配像#settingsandstuff
这样的东西,它会在路由处理程序的参数中留下斜杠(即函数将获得'/privacy'
而不只是'privacy'
)。
最灵活的选择是直接使用正则表达式route
,然后您可以将#settings
和#settings/privacy
与单条路线匹配,而不会出现上述任何一种问题:
// No routes, do it in initialize instead
initialize: function() {
this.route(/^settings(?:\/(.*)|)$/, 'settings');
}
演示:http://jsfiddle.net/ambiguous/XGrQz/
这将与#settings-and-stuff
不匹配,并且它不会在#settings/privacy
的函数参数中包含前导斜杠。