8

我有一个创建评论列表的 ruby​​ 循环。

我想知道在这种情况下是否可以将 jQuery 函数附加到 Rails link_to 助手?

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

我希望有类似的东西

    <% @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 %>

我知道这行不通,但我想知道有没有一种简单的方法来实现这种功能?

谢谢!

4

3 回答 3

7

你可以通过两种方式做到这一点。

首先是在 link_to 上添加一个 html 属性:

<% @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 %>

第二个是将Javascript与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>

如果您想要链接标签的内容,请替换'CONTENTS OF HTML'$(this).html()

于 2012-04-13T03:27:28.340 回答
3

此外,我实际上发现了 Rails link_to_function 助手,并能够通过以下方式实现所需的行为:

<% @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>
于 2012-04-13T07:42:03.790 回答
2

您可能想要使用事件委托,因为您似乎会创建大量评论。

因此,从赠款中借用如下:

<% @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>
于 2012-04-13T03:47:08.583 回答