2008-11-04 58 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