有没有办法用Backbone捕捉所有不匹配的路由?

我想有一个“全部捕获”的路线,当没有其他定义的路线匹配时运行。 一种404 NotFounderror handling程序。

我已经尝试添加这个,但工作,但防止其他路线匹配:

this.route(/(.*)/, 'notFound', this.notFound); 

任何人都解决了这个问题?

在这里回答完整性。

你可以用这两种方法来做。 使用route()定义正则expression式,就像在问题中一样。 但是,由于这个bug,你需要通过route()方法来定义所有的路由,并且以相反的顺序(catchall在顶部)。 这可以防止你使用路由哈希,所以(我)首选的方法是:

 routes: { 'users/search': 'searchUsers', 'users/:id': 'loadUser', '*notFound': 'notFound' } 

关键字'*notFound'实际上可以是任何以*开头的东西。 你只需要*后的字符来防止parsing错误。

还有另外一个,可以说是更简单/更优雅的方法来解决这个问题。 Backbone.History.start()根据是否匹配路由返回true或false。 所以,如果你只是这样做:

 if (!Backbone.history.start()) router.navigate('404', {trigger:true}); 

而不是通常的:

 Backbone.History.start(); 

它会和其他答案一样

这个非常小的插件完成它的工作: https : //github.com/STRML/backbone.routeNotFound

这是解决我迄今为止发现的这个问题的最优雅和最稳健的方法,但是请记住,通过使用它,你正在搞乱Backbone的内部。

没有你当前的路由代码的例子,我会假设确保你所有的路线是最后的路线应该为你工作

只需将其添加为列表中的最后一个路由。 这样它只会被作为后备选项匹配。

我认为这不应该通过JavaScript来解决,应该是语言解决,例如php。 在服务器端处理单词时,只要你有条件,你可以用404错误回应头部