0

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

有人知道如何处理这个吗?

问候

4

1 回答 1

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

于 2012-09-01T18:58:15.533 回答