Javascript 为什么我的路线处理程序要开火两次?
我的一个路由器处理程序会持续触发两次。虽然我可以清楚地看到路由触发器只触发了一次。我使用的木偶类如下:Javascript 为什么我的路线处理程序要开火两次?,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我的一个路由器处理程序会持续触发两次。虽然我可以清楚地看到路由触发器只触发了一次。我使用的木偶类如下: MainRouter = Backbone.Marionette.AppRouter.extend({ appRoutes: { "home": "showHome", "view/:num(/:rev)(/:ms)": "viewSmart", //smart route "*route": "s
MainRouter = Backbone.Marionette.AppRouter.extend({
appRoutes: {
"home": "showHome",
"view/:num(/:rev)(/:ms)": "viewSmart", //smart route
"*route": "showHome" //any other unrecognized routes
},
controller: routesController
});
带处理程序的控制器和控制器:
routesController = {
showHome: function () {
console.info('go home');
},
viewSmart: function (num, rev, ms) {
console.log('view route action triggered');
},...more routes
在测试此异常时,我发现viewSmart方法中最后一个可选参数是根本原因。如果我导航到一个没有(/:ms)的路由,同样的方法会触发一次,然后触发两次 我将此问题追溯到一个包含空格字符的参数字符串。因为主干网在封底下使用正则表达式来确定导航到空格的路径,所以角色会将其抛出一个循环。我猜其他特殊角色也会。我不知道为什么路由处理器会被解雇两次,但是如果我用一个加号替换空白字符,事情就会恢复正常。我只需要记住用空格替换加号 导航前:
ms = ms.replace(/ /g, '+');
之后:
viewSmart: function (num, rev, ms) {
console.log('view route action triggered');
if (ms){
ms = ms.replace(/\+/g, ' '); // '+' was used to sub for a space
}