繁体   English   中英

为什么我的路由处理程序会触发两次?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM