在can.js中定义捕获所有路由来处理404的正确方法是什么,以便首先检查所有正确的路由?如果非匹配,则此路由将捕获它,并且我可以显示404消息。
答案 0 :(得分:0)
这些只是我学到的潜入源头并进行一些测试......
如果我使用单个参数定义了一个根,例如can.route(“:section”)并在地址栏中输入一个看起来像“!#toronto / something / actsf”的片段而没有另一个匹配它的路线,目前可以将其视为上述路线并将其转换为“!#toronto%23something%23else”,这是根据为该路线生成的测试是正确的。
防止该行为的方法是使用尾部斜杠定义路径,can.route(“:section /”),当测试时,假路线应该将其重写为第一个匹配“toronto”。如果在控件中定义路径,则同样适用。
您必须在路由处理程序中捕获无效的参数,或者如果它被提供给模型,您可以处理回调中的错误。但是我觉得从一开始就很清楚。
如果您仍然想因任何原因捕获错误的路线,我已经进行了以下测试以捕获无效路线。我不建议它,因为它确实在您的应用程序中产生了不必要的开销。
can.route.bind('change', function(ev, newVal) {
if (newVal === 'route') {
var valid = false;
$.each(can.route.routes, function(k,v) {
if (new RegExp(v.test).test(window.location.hash)){
valid = true;
return; //exit loop
}
})
if (!valid) {
//handle the false route here
}
}
});
答案 1 :(得分:0)
您可以在所有路线
之后注册通配符// Catch 404
router.register('.*', 'controller#action');