2008-11-04 74 views
1

是不是有可能调用rails函数或从jQuery中访问rails对象? 我想这样做:从jquery调用一个rails函数?

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

OR

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

在我让我所有的jQuery的东西在我的application.js,它包括在我的布局的时刻。哦,是的....我没有使用Rails Edge。

问候,

塞巴斯蒂安

回答

2

你必须有在控制器的方法,这将使得你需要什么,如果你想这样做。另一种方法是在你的布局视图的最后使用视图块,像

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

,并在视图中做这样的事情:

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

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

0

@changelog:thx很多为您的答案。再次

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

谢谢!:

描绘的线下问题解决了由封闭在适当的JavaScript代码中的<%= yield :myjs %>如下


我试图执行它,你说话的方式,但我有一些困难:

我把下面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会显示在我身体块的开头,而不是头部,但仍然在打开页面时不会调用警报函数。

+0

对不起。我会修复我的答案以供将来参考。很高兴我能帮上忙。 – changelog 2008-11-04 15:21:40