从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:非常感谢您的回答。
通过将<%= yield :myjs %>
包含在适当的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 没有显示在页面的源代码中。也不会调用警报功能。
当我输入 <%= yield :myjs %>
而不是(使用 =)时,javascript 会呈现在我的正文块的开头,而不是头部,但是当我打开页面时仍然不会调用警报函数。
【讨论】:
抱歉出现问题。我将修复我的答案以供将来参考。很高兴我能帮上忙。以上是关于从jquery调用rails函数?的主要内容,如果未能解决你的问题,请参考以下文章
从原型迁移到 Jquery Rails,empty() 函数不起作用
Rails - 从 JavaScript 调用 CoffeeScript
Rails 6 和 Jquery 插件错误:$(...).validate 不是函数