2012-04-13 6 views
6

ho un ciclo rubino che crea un elenco di commenti ..chiamata jQuery da Rails link_to

Mi chiedo se posso collegare la funzione jQuery per Rails link_to helper in questo caso?

<% @video.phrases.each do |phrase| %> 
    <div class = "span4" id ="comment" ><%= phrase.content %></div><a id ="ff" ><%= image_tag("ff.png", :size=> "32x32")%></a> 
    <% end %> 

spero in qualcosa di simile a

<% @video.phrases.each do |phrase| %> 
    <div class = "span4" id ="comment" ><%= phrase.content %></div><%= link_to (image_tag("ff.png", :size=> "32x32"), html => {<script>$("#video_div").html('CONTENTS OF HTML');</script>} :remote => true %> 
    <% end %> 

So che non funziona, ma mi chiedo c'è un modo semplice per ottenere questo tipo di funzionalità?

Grazie!

risposta

6

È possibile eseguire questa operazione in due modi.

Il primo è l'aggiungere un attributo HTML sul link_to:

<% @video.phrases.each do |phrase| %> 
    <div class = "span4" id ="comment" > 
    <%= phrase.content %> 
    </div> 
    <%= link_to (image_tag("ff.png", :size=> "32x32"), html => {:onclick => "$('#video_div').html('CONTENTS OF HTML');"} :remote => true %> 
<% end %> 

Il secondo è quello di separare il Javascript da Ruby:

<% @video.phrases.each do |phrase| %> 
    <div class = "span4" id ="comment" > 
    <%= phrase.content %> 
    </div> 
    <%= link_to (image_tag("ff.png", :size=> "32x32") :remote => true %> 
<% end %> 

<script type="text/javascript"> 
    $('a').click(function(){ 
    $("#video_div").html('CONTENTS OF HTML'); 
); 
</script> 

Se si desidera che il contenuto del tag link, sostituire 'CONTENTS OF HTML' per $(this).html()

+0

grazie lo proverò ora – Stpn

2

È possibile utilizzare la delega degli eventi, poiché sembra che si crei un numero elevato di commenti.

Così, prendendo in prestito dalla concessione qualcosa di simile:

<% @video.phrases.each do |phrase| %> 
    <div class = "span4" id ="comment" > 
    <%= phrase.content %> 
    </div> 
    <%= link_to (image_tag("ff.png", :size=> "32x32") :remote => true %> 
<% end %> 
<script type="text/javascript"> 
    $("#comment-wrapper-name-here").on("click", "a", function() { 
    $("#video_div").html('CONTENTS OF HTML'); 
); 
</script> 
3

anche in realtà ho scoperto Rails link_to_function aiuto ed è stato in grado di ottenere il comportamento desiderato con:

<% @video.phrases.each do |phrase| %> 
<div class = "span4" id ="comment" ><%= phrase.content %></div><a id ="ff"> 
    <%= link_to_function image_tag("ff.png", :size=> "32x32"), "use_comment('#{phrase.comment}')"%> 
</a>