如何忽略 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;
然后在浏览器中:
成功触发登录路由,但是
(在末尾加一个正斜杠)不会触发登录路由功能。我知道我可以定义另一个路由条目:
...
'login': 'login',
'login/': 'login',
...
解决这个问题,但是这个解决方案会使路由器定义中的条目加倍。有没有更好的方法来触发 login
和 login/
的相同路由处理程序?
您是否尝试过用括号将尾部斜线括起来?像下面这样:
routes: {
'login(/)': 'login'
}
来自backbone documentation:
Part of a route can be made optional by surrounding it in parentheses
(/:optional).
我在 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;
然后在浏览器中:
成功触发登录路由,但是
(在末尾加一个正斜杠)不会触发登录路由功能。我知道我可以定义另一个路由条目:
...
'login': 'login',
'login/': 'login',
...
解决这个问题,但是这个解决方案会使路由器定义中的条目加倍。有没有更好的方法来触发 login
和 login/
的相同路由处理程序?
您是否尝试过用括号将尾部斜线括起来?像下面这样:
routes: {
'login(/)': 'login'
}
来自backbone documentation:
Part of a route can be made optional by surrounding it in parentheses (/:optional).