Как обнаружить неверный маршрут и вызвать функцию в Backbone.Controller
Есть ли какой-нибудь метод для обнаружения недопустимого (или неопределенного) маршрута и запуска страницы 404 в Backbone.Controller?
Я определил маршруты в моем контроллере следующим образом, но это не сработало.
class MyController extends Backbone.Controller
routes:
"method_a": "methodA"
"method_b": "methodB"
"*undefined": "show404Error"
# when access to /#method_a
methodA: ->
console.log "this page exists"
# when access to /#method_b
methodB: ->
console.log "this also exists"
# when access to /#some_invalid_hash_fragment_for_malicious_attack
show404Error: ->
console.log "sorry, this page does not exist"
ОБНОВИТЬ:
Я использовал конструктор Backbone.Controller для сопоставления текущего хеш-фрагмента и @routes.
class MyController extends Backbone.Controller
constructor: ->
super()
hash = window.location.hash.replace '#', ''
if hash
for k, v of @routes
if k is hash
return
@show404Error()
routes:
"method_a": "methodA"
"method_b": "methodB"
"*undefined": "show404Error"
# when access to /#method_a
methodA: ->
console.log "this page exists"
# when access to /#method_b
methodB: ->
console.log "this also exists"
# when access to /#some_invalid_hash_fragment_for_malicious_attack
show404Error: ->
console.log "sorry, this page does not exist"
1 ответ
Решение
Выше работает, но я не уверен, почему вы должны делать то, что вы делаете в конструкторе. Это может быть немного хрупким, но мы создаем отдельный контроллер, который мы включаем в последний. Он последний, так что маршрут сплат будет последним:
NotFound = Backbone.Controller.extend({
routes: {
"*path" : "notFound"
},
notFound: function(path) {
var msg = "Unable to find path: " + path;
alert(msg);
}
});
new NotFound();
Использование более надежной версии вышеупомянутого кажется мне более чистым подходом.