Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的路线处理程序要开火两次?_Javascript_Backbone.js_Marionette - Fatal编程技术网

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 
            }