0

我在一个 ruby​​ 视图文件中看到了这个标签<%=j some-variable %>,我想知道是否有人能告诉我j它代表什么?我知道<%= %>用于打印 ruby​​ 并<% %>用于在视图中使用 ruby​​ 代码。

4

3 回答 3

5

在 Ruby on Rails 视图中,j()是 的别名escape_javascript()

为 JavaScript 段转义回车和单引号和双引号。

这通常用于 DOM 操作,例如,当您想要呈现另一个 ERB 模板并将该输出用作 JS 函数的参数时。

如果您使用的是 jQuery,则在创建新记录后,您的 JS 响应中可能会有类似的内容:

$('ul#items').append('<%= j render(resource) %>');

这将呈现资源的相应部分,转义结果以便它可以用作 Javascript 字符串,将该转义字符串括在引号中,然后将该最终字符串附加到 DOM 节点。

更新:

(这来自我在讨论其他答案之一时的评论。)

许多 Ruby 开发人员在.j旁边写了右边<%=,没有任何分隔空格。有些人写道<%=j render 'something' %>,虽然通常至少包含这样的内部方法调用参数:puts some_method('bar').

h在 Rails 开始自动转义字符串之前,转义 HTML的别名也是如此。

于 2013-10-15T20:07:08.740 回答
3

我很确定这是escape_javascript

<%=j some-variable %> => <%= escape_javascript some-variable %>

将尝试为此寻找来源


这是来源。请注意,这仅在 Rails 4.0 中可用。

所以我不确定,实际上 - 文档中的上下文使它看起来需要与render...结合使用

$('some_element').replaceWith('<%=j render 'some/element_template' %>');
于 2013-10-15T20:03:53.367 回答
2

在这个例子中,j是方法并且some-variable是它的参数。调用方法后,此调用的结果将转换为字符串并插入到您的视图中。

更准确地说,jescape_javascript方法的别名,用于转义 JavaScript 字符。

于 2013-10-15T20:02:09.617 回答