javascript - 尝试从帮助程序导入 HTML,但 Rails 不喜欢它
问题描述
我基本上有一个提交远程 GET 请求的表单,然后显示一个模式。我有几个可以使用相同模型的不同操作,所以我只是尝试使用帮助器和 jQuery 来显示不同的数据,具体取决于显示的内容。
这就是我正在处理的问题。这是我的 add_users.js.erb 文件(在远程 GET 请求后调用):
$('.modal-footer').html("<%= import_users_html %>");
下面是助手的样子:
def import_users_html
html = link_to '<i class="fa fa-download"></i> Import Users'.html_safe, '#', remote: :true, class: "btn btn-success btn-sm"
return html
end
但是,当它返回 HTML 时,它不会显示在该<div class="modal-footer"
部分中。如果我将其替换import_users_html
为“Hello World”,那么它可以完美运行。
在某处,它不喜欢 html 的结果。以下是变量在返回到视图html
之前的实际情况:add_users.js.erb
[2] pry(#<#<Class:0x00007f3bbe257050>>)> puts html
<a class="btn btn-success btn-sm" data-remote="true" href="#"><i class="fa fa-download"></i> Import Users</a>
我已经尝试过像html_safe
,之类的随机方法raw
,但由于某种奇怪的原因,它们似乎都不起作用。
** 编辑 **
所以我发现这是因为link_to
最终将链接转换为包含双引号,这是我在add_users.js.erb
助手中使用的,所以我猜它是冲突的。
解决方案
在您的 javascript 代码中尝试类似:
$('.modal-footer').html("<%= j(import_users_html) %>");
j
是一个别名escape_javascript
,它将处理您的引号冲突。
为 JavaScript 段转义回车和单引号和双引号。
推荐阅读
- vue.js - 在路由器视图之间移动时 Vue 组件状态冻结
- c++ - 是否可以将引用存储在 std::any 中?
- java - 如何高效地将对象添加到 hazelcast 中的分布式队列?
- ios - 用于应用后台处理的 iOS CoreBluetooth 调度队列
- python - Python 的内置类型是否有多余的特殊方法?
- javascript - 如何创建一个会杀死点击的功能的功能?
- .net - 管理员角色的问题:“访问被拒绝”
- python - Python 3 ttk.Spinbox 格式选项
- .net-core - 为什么 JwtHeader 不提供同时采用 SigningCredentials 和 EncryptingCredentials 的构造函数?
- pandoc - pandoc:过滤器中的`RawBlock`