すべての正しいルートが最初にチェックされるように、can.js で 404 を処理するためのキャッチオールルートを定義する適切な方法は何ですか? 一致しない場合、このルートはそれをキャッチし、404 メッセージを表示できます。
2 に答える
これらは、私がソースに飛び込んでいくつかのテストを行うことを学んだほんの一部です...
たとえば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
}
}
});