Магистральные маршруты не являются регулярными выражениями (если вы не добавляете маршрут регулярного выражения вручную, используя route
). Из тонкой инструкции :
Маршруты могут содержать части параметров, :param
, которые соответствуют одному компоненту URL между слешами; и разделительные части *splat
, которые могут соответствовать любому количеству компонентов URL.
[...] Маршрут "file/*path"
будет соответствовать #file/nested/folder/file.txt
, передавая "nested/folder/file.txt"
действию.
И если мы проверим источник, мы увидим это :
// Backbone.Router
// -------------------
//...
// Cached regular expressions for matching named param parts and splatted
// parts of route strings.
var namedParam = /:\w+/g;
var splatParam = /\*\w+/g;
Таким образом, ваш '.*'
маршрут должен соответствовать буквально '.*'
, а не «чему-либо», как вы ожидаете.
Я думаю, вы хотите что-то более похожее на это:
routes:
'' : 'index'
#...
'*path' : 'index'
Убедитесь, что ваш маршрут *path
находится на в нижней части списка маршрутов :
// Bind all defined routes to `Backbone.history`. We have to reverse the
// order of the routes here to support behavior where the most general
// routes can be defined at the bottom of the route map.
Это предположение о «порядке» элементов в объекте кажется мне довольно опасным и непродуманным, поскольку нет гарантированного порядка :
Механизм и порядок перечисления свойств (шаг 6.a в первом алгоритме, шаг 7.a во втором) не указан.
Думаю, вам лучше добавить маршрут по умолчанию *path
вручную в методе initialize
:
class NodeNetBackbone.Routers.RegistryPatients extends Backbone.Router
routes:
'' : 'index'
'/index' : 'index'
'/:id' : 'show'
'/new' : 'new'
'/:id/edit' : 'edit'
initialize: ->
console.log 'init the router'
@route '*path', 'index'
#...