如何在单页应用程序中处理非根 URL?

2023-11-25

我尝试使用 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(使用前将#替换为@)

如何在单页应用程序中处理非根 URL? 的相关文章

  • 主干表视图消耗行视图 - 如何构造?

    我有一组模型希望在表格视图中呈现 每个模型应由表中的一行表示 并且该行应使用模板生成 我应该能够将事件处理程序附加到该行 例如单击 在事件发生时发出有关与该行关联的模型的一些特定信息 我见过类似的事情的一种常见方法是将每一行分解到它自己的视
  • ASP.NET Core 授权重定向到错误的 URL

    我正在尝试运行一个映射了以下路由的 Web 应用程序 app UseMvc routes gt routes MapRoute default WoL controller Account action Login id 如果用户未经过身份
  • 依赖注入与托管依赖关系与全局对象

    我正在 Javascript BackboneJS 一个 MVC 框架 RequireJS 框架中工作 但这个问题有点 OO 通用 首先让我解释一下 在 Backbone 中 您的视图是传统视图和控制器的混合 而您的 HTML 模板是传统的
  • 我的 Rails 路由应该是什么样子才能与 pushState Ember.js 路由一起使用?

    简而言之 当构建 Ember js 应用程序以持久保存到 Rails 应用程序时 我应该如何处理 Rails 路由 视图 我想我只需要 Rails 来渲染 application html erb 布局 以便 Ember js 应用程序初始
  • 在backbone.js 中缓存集合?

    确保我的集合保持缓存并仅获取一次的最佳方法是什么 我应该实现某种缓存层吗 我应该分享Collection变量到需要的地方 我可以信任 jQuery 的 AJAX 设置吗 ajaxSetup cache true 现在看起来的基本集合 the
  • Rails Routes - 限制资源的可用格式

    我有一系列资源 我只想通过 JS 格式访问这些资源 Rails 的路线资源为我提供了格式和标准 HTML 有没有办法指定只创建JS格式的路由 您必须将这些路由包装在一个范围内 不幸的是 在这种情况下 约束不能按预期工作 这是此类块的一个示例
  • Backbone.js 和层次结构/树

    我正在开发一个应用程序 该应用程序需要一个表单 允许用户管理任意深度的产品类别层次结构 我可以很容易地将数据加载到页面上 但我有点不知道需要做什么才能使这样的东西与backbone js一起工作 基本上 我正在寻找嵌套的 UL 当用户选择一
  • Docker nuget连接超时

    尝试利用官方jetbrains teamcity agentKubernetes 上的图像 我已经设法在 Docker 中运行 Docker 但尝试使用以下命令构建 ASP NET Core 映像docker build命令失败于dotne
  • 如何在 Rails 3.2.8 中使用 Jquery?

    我读过的所有教程都告诉我使用 public javascripts 文件夹 但rails 3 2 8中没有这个文件夹 我的 jquery 代码应该放在哪里 Rails 3 2 8 中不包含 Jquery 吗 默认的 Rails 应用程序 g
  • 如何在navigationStart路由器事件中暂停路线更改

    在我的应用程序中 我有从包 节点模块 公开的路由 因此 我无法将 canActivate 或 canDeactivate 用于节点模块内定义的路由 因此 我开始订阅应用程序组件中的所有路线更改 并根据条件将用户重定向到不同的路线 由于条件有
  • 与 jQuery 配合使用的backbone.js 替代品?

    有没有像backbone js这样的东西的替代品 它为你的前端javascript提供了一些框架 结构 但没有任何不需要的依赖项 并且与jQuery更紧密地结合在一起 您需要一个易于使用的 MVC 框架吗 因为Sammy js http s
  • 覆盖骨干模型更改事件

    我认为我想做的事情很简单 我只是不知道该怎么做 当我的模型属性之一发生更改以便将一些数据传递给事件处理程序时 无论更改是值的增加还是减少 我想触发我自己的事件 基本上我希望我的处理程序在视图中执行此操作 handler function i
  • Flutter:go_router如何将多个参数传递到其他屏幕?

    在普通颤动中 我用来将多个参数传递到其他屏幕 如下所示 Navigator of context push MaterialPageRoute builder gt CatalogFilterPage list list bloc bloc
  • 如何找到 Rails 中的当前路线?

    我需要知道 Rails 中过滤器中的当前路线 我怎样才能知道它是什么 我正在处理 REST 资源 但没有看到命名路由 如果您尝试对视图中的某些内容进行特殊处理 您可以使用current page as in 或者一个动作和ID 或命名路线
  • ASP NET Web API 路由模板

    我有一个名为 Agency 的实体 具有以下 api GET http localhost 37331 api agency start 1 limit 10 status 1 GET http localhost 37331 api ag
  • 获取集合时的 ​​Backbone.js 进度条

    我想在用新内容更新应用程序时显示进度条 我想最好的办法是在集合上调用 fetch 时执行此操作 我获取的内容主要是图像 视频海报等 但我只获取链接 而不是 base64 字符串或大的东西 我想做的是在获取图像链接时用进度条覆盖屏幕 渲染视图
  • 淘汰赛“闪烁”问题

    我正在使用 KO 构建 SPA 单页应用程序 该应用程序看起来像一本书 用户可以翻页 问题是 每次加载页面时 都会有一小段时间页面 闪烁 用户会看到页面的无样式版本 我猜这是因为很多样式都依赖于 ko 绑定 所以在 ko 完成它 神奇 之前
  • Node.js 解析路由的最小函数

    我有一个 Node js Express 应用程序正在运行 它接收如下路由 app get resource res someFunction app get foo bar id someOtherFunction 这很棒并且工作正常 我
  • Backbone.js el 不工作

    App Views VideoView Backbone View extend initialize function bindAll this render this model this options model this rend
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l

随机推荐

  • HTML WYSIWYG 编辑器:为什么可编辑内容移动到 iFrame 中

    为什么可编辑的 html 被移到 iFrame 中 我分析了不同的编辑器 TinyMce CKEditor 等 并将所有可编辑内容移动到一个单独的 iFrame 中 并将其覆盖在原始文本上 这是什么技术原因 我尝试过contentedita
  • Casperjs:如何打印http请求和响应?

    出于调试目的 我需要查看整个请求 标头和数据 我怎样才能实现这个目标 Casper 好吧 实际上是 PhantomJS 提供了两个回调 一个当资源被请求时 您可以在其中看到正在发送的标头 以及何时收到回复 这样你就可以看到服务器回复的标头
  • 带有固定部分标题的 PullToRefresh 列表

    有没有人有使用实践Pull to refresh列出与Pinned section header I use Android PullToRefreshlib 与我的列表 我想添加在列表顶部显示固定节标题的功能 我用了固定标题列表视图另一个
  • 命令提示符不会将目录更改到另一个驱动器

    我正在尝试编译一些java 当前正在学习java 为此我需要更改命令提示符的目录 C Admin gt cd D Docs Java C Admin gt cd C Admin 它不会更改目录 我再次尝试使用引号 C Admin gt cd
  • jQuery - 如何在事件触发后暂时禁用 onclick 事件侦听器?

    在事件触发后 如何暂时禁用 onclick 事件侦听器 首选 jQuery Example 用户单击按钮并触发下面的此函数后 我想禁用 onclick 侦听器 因此不会向我的 django 视图触发相同的命令 btnRemove click
  • 什么是 Json.NET Mono 程序集参考?

    我正在尝试编译此 Json NET 代码 using Newtonsoft Json MyDesc d JsonConvert DeserializeObject
  • 仅使用蓝牙选项共享意图

    我正在尝试使用我的应用程序通过蓝牙发送文件 我已经将 mime 类型更改为随机的 asdxasd asdxa 该文件有一个我需要使用的扩展名 即 sso 当我使用共享意图时 它只出现蓝牙和 gmail 选项 但我不能从列表中删除 gmail
  • 异常过滤器在 Web api 中不起作用

    我有一个自定义异常过滤器 能够处理控制器中的所有错误 只是一个常见的错误处理机制 public class ExceptionHandlingAttribute ExceptionFilterAttribute public overrid
  • 如何在Tomcat上安装和使用CDI?

    我正在创建我的第一个项目 Java EE 7 但遇到了麻烦 感谢任何帮助 雄猫7 0 34 JSF 2 2 Primefaces 3 5 javaee api 7 0 jar 当应用程序启动时 Tomcat 日志显示以下消息 validat
  • 回调函数触发得太早

    我在 jQuery 中有这个简单的函数 function detailspage page if page checkcurrent checkcurrent page div details children div slideUp sl
  • 如何打印列表中的类型

    所以我得到了一个列表 我必须打印列表中每个项目的类型 我可以清楚地看到有字符串和整数 但我需要它在 Python 中打印出来 我们刚刚了解到for 循环所以我觉得这就是他们正在寻找的东西 但我无法将其打印出来 ls type item fo
  • 在使用 ZEIT Now 部署的 Next.js 应用程序中使用绝对导入

    在 Next js 9 教程中建议的方法导入共享组件是通过相对路径 比如 import Header from components Header 我想使用绝对导入 例如 import Header from components Head
  • listview 与 arraylist,android 中的简单适配器

    我尝试使用 arraylist 和简单适配器在列表视图中显示一些内容 我尝试了类似下面的操作 但结果显示了数组列表的姓氏 我有什么错我无法理解 final ListView listView ListView findViewById R
  • 查找正在运行的进程的 PID 并存储为数组

    我正在尝试编写一个 bash 脚本来查找正在运行的进程的 PID 然后发出终止命令 我已经部分工作了 但我面临的问题是可能有多个进程正在运行 我想向找到的每个 PID 发出终止命令 我想我需要将每个 PID 放入一个数组中 但我不知道如何做
  • C# + SQL Server ExecuteScalar() 不返回最后插入的 id

    我有以下函数 它执行查询并在成功时返回 true 在失败时返回 false 不 我想扩展该方法 以便在触发每个插入查询时 类 varinsertId包含最后插入的行的 ID 问题是insertId总是 0 所以不知何故executeScal
  • jQuery - 动态div高度等于整个窗口的高度

    我正在使用这里找到的代码jQuery 动态div高度 现在 当您调整窗口大小时 高度更改可以正常工作 但是如果向下滚动 高度不会改变 这意味着窗口属性不包含超出浏览器窗口大小的内容 因此 如果向下滚动 高度不会增加 那么我可以添加什么 那就
  • powershell运行java进程问题

    我正在尝试在 Windows XP 中通过 Powershell 运行 java 进程 这是命令 java exe cp common jar Dcontext atest1 Dresourcepath DW Install 所以 类路径是
  • 如何实现水平滚动选项卡?

    我正在尝试实现这个应用程序 目前我已经在上面设计了选项卡 由于我有超过 7 个选项卡 所以看起来太拥挤了 我该如何设计才能使 tabwidget 可以水平滚动 我在市场上的一些应用程序上看到过这种设计 但不知道如何在我的应用程序中实现它 我
  • gfortran 中的 ieee_arithmetic 内在模块

    我需要使用 gfortran 编译一个依赖于的库ieee arithmetic 但是发现gfortran无法识别这个模块 例如用代码a f90 program test use intrinsic ieee arithmetic real
  • 如何在单页应用程序中处理非根 URL?

    我尝试使用 Rails 3 2 和 Backbone js 以及 pushState 选项制作一个单页应用程序 但遇到了一些我不理解的问题 如果我加载应用程序的根 URL 一切都会正常 Rails 返回一个带有 JS 的 HTML 布局 它