我尝试使用 Rails 3.2 和 Backbone.js 以及 pushState 选项制作一个单页应用程序,但遇到了一些我不理解的问题。
如果我加载应用程序的根 URL (/),一切都会正常:Rails 返回一个带有 JS 的 HTML 布局,它引导 Backbone,为 JSON 实体生成一些 XHR 并呈现内容。
但如果我开始使用应用程序非根 URL(例如,通过在浏览器的地址栏中手动输入)然后Rails将尝试使用来自routes.rb的路由规则来处理此请求 - 这是错误的,因为它是“Backbone”路由。在这种情况下,如何加载页面并引导 Backbone 来处理此 URL?
最后我找到了解决方案。
我将以下代码放入我的routes.rb中
class XHRConstraint
def matches?(request)
!request.xhr? && !(request.url =~ /\.json$/ && ::Rails.env == 'development')
end
end
match '(*url)' => 'home#index', :constraints => XHRConstraint.new
使用此匹配器,所有非 XHR 请求都将路由到返回 HTML 页面的 HomeController。 XHR 请求将由返回 JSON 响应的其他控制器处理。
此外,我还将以“.json”结尾的请求保留为在开发环境中有效以进行调试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)