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 使用navigate时主干路由器触发的事件顺序_Javascript_Backbone.js - Fatal编程技术网

Javascript 使用navigate时主干路由器触发的事件顺序

Javascript 使用navigate时主干路由器触发的事件顺序,javascript,backbone.js,Javascript,Backbone.js,我正在使用主干网的“所有”事件捕获应用程序中的所有路由事件,以便记录页面视图。只要我不使用导航手动触发路线,这项功能就可以正常工作。 在下面的示例中,我将用户从仪表板路由转发到登录路由。主干在执行路由回调后触发事件,导致以下输出: showDashboard showLogin route:showLogin tracking:/login route:showDashboard tracking:/login 显然这不是我想要的。我知道我可以调用showLogin而不是使用navigate来

我正在使用主干网的“所有”事件捕获应用程序中的所有路由事件,以便记录页面视图。只要我不使用
导航
手动触发路线,这项功能就可以正常工作。 在下面的示例中,我将用户从
仪表板
路由转发到
登录
路由。主干在执行路由回调后触发事件,导致以下输出:

showDashboard
showLogin
route:showLogin
tracking:/login
route:showDashboard
tracking:/login
显然这不是我想要的。我知道我可以调用
showLogin
而不是使用
navigate
来触发登录路径,这就是我现在正在做的,但我想知道为什么事件的顺序与触发的回调顺序不同

这是我的路由器(简称):


主干网的
路由器
实际上非常简单,如果您阅读,您将在其构造函数中看到以下内容:

this._bindRoutes();
this.initialize.apply(this, arguments);
\u bindrouts
按预期附加所有路由,并在调用
initialize
函数之前执行此操作。所以你的绑定总是在主干完成后触发

你可能会更好地找到另一种方法来做这件事

您可以在路由中自己键入函数之前调用
,以跟踪页面浏览量等。或者您可以覆盖
路由
,跟踪页面浏览量,然后确保使用
主干网.Router.prototype.route.call(参数)之类的函数调用主干网的实现

this._bindRoutes();
this.initialize.apply(this, arguments);