从jquery调用rails函数?

Posted

技术标签:

【中文标题】从jquery调用rails函数?【英文标题】:call a rails function from jquery? 【发布时间】:2010-09-20 16:15:43 【问题描述】:

是否有可能在 jQuery 中调用 rails 函数或访问 rails 对象? 我想做类似的事情:

jQuery(document).ready(function($) 
$('#mydiv').html("<%= @object.name %>");
);

jQuery(document).ready(function($) 
$('#mydiv').html("<%= render :partial => "contacts" %>");
);

目前,我将所有 jQuery 内容保存在我的 application.js 中,它包含在我的布局中。哦,是的....而且我没有使用 Rails Edge。

问候,

塞巴斯蒂安

【问题讨论】:

【参考方案1】:

如果你想这样做,你必须在控制器中有一个方法来呈现你需要的东西。另一种方法是使用视图块,例如在布局视图的末尾

<script type="text/javascript">
<%= yield :footerjs %>
</script>

并在视图中执行以下操作:

<% content_for :footerjs do %>
jQuery(document).ready(function($) 
$('#mydiv').html('<%= escape_javascript(render :partial => "contacts") %>');
);
<% end %>

您需要确保您要渲染的部分不会包含可能导致 javascript 错误的字符(例如在字符串结尾之前完成引号等)。另外,有些浏览器不喜欢多行字符串,所以你也必须摆弄它。

【讨论】:

【参考方案2】:

@changelog:非常感谢您的回答。

通过将&lt;%= yield :myjs %&gt; 包含在适当的javascript 标记中,解决了该行下方描述的问题,如下所示:

<script type="text/javascript">
<%= yield :myjs %>
</script>

再次感谢!!


我尝试按照你说的方式实现它,但我遇到了一些困难:

我将以下 content_for 块放在 show.html.erb 的顶部:

<% content_for :myjs do %>
jQuery(document).ready(function($)  alert('hello'); );
<% end %>

在我的 layout.html 中,我包含了所有的 javascript 如下(这里 applications.js 实现了一些通用的 jQuery 函数):

<head>
...
<%= javascript_include_tag 'jquery', 'application' %>
<%= javascript_tag "var AUTH_TOKEN = #form_authenticity_token.inspect;" if protect_against_forgery? %>
<% yield :myjs %>
</head>
<body>
...

问题是当我调用它时,我的 javascript 没有显示在页面的源代码中。也不会调用警报功能。 当我输入 &lt;%= yield :myjs %&gt; 而不是(使用 =)时,javascript 会呈现在我的正文块的开头,而不是头部,但是当我打开页面时仍然不会调用警报函数。

【讨论】:

抱歉出现问题。我将修复我的答案以供将来参考。很高兴我能帮上忙。

以上是关于从jquery调用rails函数?的主要内容,如果未能解决你的问题,请参考以下文章

从原型迁移到 Jquery Rails,empty() 函数不起作用

从rails视图文件中的脚本调用js文件中的函数

Rails - 从 JavaScript 调用 CoffeeScript

Rails 6 和 Jquery 插件错误:$(...).validate 不是函数

rails jquery tokeninput 返回“不是函数”

jquery/rails 回调一个函数来刷新数据表