为什么我的路线处理程序会触发两次
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)的路线,相同的方法会激发一次,同时激发两次。
我将此问题追溯到一个包含空格字符的参数字符串。由于主干使用隐藏的regex来确定导航到空格的路由,因此字符会将其抛出循环。我猜其他特别的角色也会。我不知道为什么路由处理程序会被解雇两次,但如果我只是用加号替换空格字符,例如,事情就会恢复正常。我只需要记住把加号换成空格。
导航前:
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
}
相关文章:
- ng在一页中包含两次相同的部分页面
- Angular JS:使用ng重复计算每行两次之间的差
- ng标记输入,不允许在文本框中输入两次相同的文本
- outerWidth(true) 连续返回两次不同的值,而无需重新加载页面
- 我怎样才能计算两次之间的差值
- 不能在ng类上重复两次相同的条件
- 在一个元素上添加两次相同的类
- 如何用d3加载两次相同的更新csv
- 检查两次之间的时间间隔
- 为什么我可以在javascript中定义两次相同的函数
- 上传两次相同的图像文件-Javascript
- 两次之间的Javascript
- 用分钟计算两次约会的差异
- 使用jQuery和javascript计算两次之间的差异,并以分钟为单位返回
- 无法运行包含两次setTimeout()的函数.奇怪的行为
- 两次相同的onclick功能-只有一个工作
- 两次之间的时间间隔
- Javascript if语句和&&当使用两次相同的变量时,操作符不工作
- 为什么我的Angular.js控制器在下面的代码中执行了两次它的函数?
- 我如何用分钟计算两次约会的时间差