evi*_*ery 41 javascript router backbone.js
我希望有一个'catch all'路由,当没有其他定义的路由匹配时,它会运行.一种404 NotFound错误处理程序.
我尝试添加此功能,但可以防止其他路由匹配:
this.route(/(.*)/, 'notFound', this.notFound);
Run Code Online (Sandbox Code Playgroud)
有没有人解决过这个问题?
evi*_*ery 83
在这里回答完整性.
你可以这两种方式做到这一点.使用route()问题定义正则表达式.但是,由于这个错误,您需要通过该route()方法定义所有路由,并以相反的顺序(在顶部捕获).这可以防止您使用路由哈希,因此(我的)首选方法是:
routes: {
'users/search': 'searchUsers',
'users/:id': 'loadUser',
'*notFound': 'notFound'
}
Run Code Online (Sandbox Code Playgroud)
密钥'*notFound'实际上可以是任何开头的东西*.您只需要在之后使用字符*以防止解析错误.
mac*_*ost 20
还有另一种,可以说更简单/更优雅的方法来解决这个问题. Backbone.History.start()根据路由是否匹配返回true或false.所以,如果你这样做:
if (!Backbone.history.start()) router.navigate('404', {trigger:true});
Run Code Online (Sandbox Code Playgroud)
而不是通常的:
Backbone.History.start();
Run Code Online (Sandbox Code Playgroud)
它将与其他答案具有相同的效果.
| 归档时间: |
|
| 查看次数: |
17026 次 |
| 最近记录: |