Backbone.Router接受查询和路径

时间:2012-09-01 10:11:04

标签: javascript regex backbone.js router backbone-routing

我希望我的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 /'

任何人都知道如何处理这个问题?

此致

1 个答案:

答案 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的函数参数中包含前导斜杠。