[英]Why does my route handler fires twice?
我的一个路由器处理程序被一致触发两次。 尽管我可以清楚地看到路由触发器仅触发一次。 我正在使用像这样的Marionette AppRouter类:
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.