未处理的路线
我有一个node.js(服务器)和backbone.js(客户端)应用程序 - 我可以在页面上加载并初始化我的主干应用程序...并初始化路由器,但我的默认路由(“.*”)是没有被叫到。我可以在初始化路由器后手动调用索引函数,但当我通过 Rails 构建骨干应用程序时,我不必执行该步骤。
有谁知道为什么会发生这种情况?
添加代码(在咖啡脚本中):
class NodeNetBackbone.Routers.RegistryPatients extends Backbone.Router
routes:
'' : 'index'
'.*' : 'index'
'/index' : 'index'
'/:id' : 'show'
'/new' : 'new'
'/:id/edit' : 'edit'
initialize: ->
console.log 'init the router'
@registry_patients = new NodeNetBackbone.Collections.RegistryPatients()
# TODO: Figure out why this isn't sticking...
@registry_patients.model = NodeNetBackbone.Models.RegistryPatient
# TODO: Try to only round trip once on initial load
# @registry_patients.reset($('#container_data').attr('data'))
@registry_patients.fetch()
# TODO: SSI - why are the routes not getting processed?
this.index()
index: ->
console.log 'made it to the route index'
view = new NodeNetBackbone.Views.RegistryPatients.Index(collection: @registry_patients)
# $('#container').html('<h1>Patients V3: (Backbone):</h1>')
$('#container').html(view.render().el)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
主干路由不是正则表达式(除非您使用
route
手动添加正则表达式路由)。来自精细手册:如果我们检查源代码,我们会看到这个:
因此,您的
'.*'
路由应该只匹配文字'.*'
而不是您期望的匹配“任何内容”。我认为你想要更像这样的东西:
确保你的
*path
路线位于 路线列表的底部:这种关于对象中元素“顺序”的假设对我来说似乎相当危险且考虑不周,因为 没有保证顺序:
我认为你最好在
initialize
方法中手动添加默认的*path
路由:Backbone routes are not regexes (unless you manually add a regex route using
route
). From the fine manual:And if we check the source, we'll see this:
So your
'.*'
route should only match a literal'.*'
rather than matching "anything" as you're expecting.I think you want something more like this:
Make sure your
*path
route is at the bottom of your route list:This assumption about the "order" of elements in an object seems rather dangerous and ill-considered to me as there is no guaranteed order:
I think you'd be better off adding your default
*path
route manually in yourinitialize
method: