如何忽略 marionette 路由中的尾部斜杠?

How to ignore trailing slash in marionette routes?

我在 Marionettejs 中定义路由如下:

var Mn = require('backbone.marionette');

var Router = Mn.AppRouter.extend({
    routes: {
        '': 'default',
        'login': 'login',     // http://localhost:8080/#/login
        'signup': 'signup'    // http://localhost:8080/#/signup
    }, 
    initialize: function () {
        var initData = this.getOption('keyInOptions');
    },
    // below are route functions
    default: function () {
        console.log('this is default route');
    }, 
    login: function () {
        console.log('this is login route');
    },
    signup: function () {
        console.log('this is signup route');
    }
});

module.exports = Router;

然后在浏览器中:

http://localhost:8080/#/login

成功触发登录路由,但是

http://localhost:8080/#/login/

(在末尾加一个正斜杠)不会触发登录路由功能。我知道我可以定义另一个路由条目:

...
'login': 'login',
'login/': 'login',
...

解决这个问题,但是这个解决方案会使路由器定义中的条目加倍。有没有更好的方法来触发 loginlogin/ 的相同路由处理程序?

您是否尝试过用括号将尾部斜线括起来?像下面这样:

routes: {
    'login(/)': 'login'
}

来自backbone documentation:

Part of a route can be made optional by surrounding it in parentheses (/:optional).