在 can.js 中定义处理 404 的全部路由的正确方法是什么,以便首先检查所有正确的路由?如果不匹配,这条路线将捕获它,我可以显示 404 消息。
问问题
304 次
2 回答
0
这些只是我深入研究源代码并进行一些测试所学到的一些东西......
如果我用单个参数定义了一个根,例如 can.route(":section") 并在地址栏中输入一个看起来像 "!#toronto/something/feasf" 的片段并且没有其他路由匹配它,目前可以将其视为上述路线并将其转换为“!#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
}
}
});
于 2012-12-14T17:55:24.160 回答
0
您可以在所有路线之后注册通配符
// Catch 404
router.register('.*', 'controller#action');
于 2015-06-25T00:37:27.543 回答