使用Jquery使帖子的注释在Rails中可以切换

时间:2013-02-10 09:57:20

标签: ruby-on-rails jquery

场景:帖子有很多评论。在帖子的索引页面中,当用户点击显示链接(link_to post)时,其评论将显示在帖子下方。

这里我使用append()添加注释: $('#edit_post_<%= @post.id %>').append('<%= j render "comments/comments" %>')因此,当用户点击显示链接时,评论将会加载并显示。

但是我怎么能再次隐藏这些评论(即发表评论)?

文章/索引

<h1>Posts</h1>
<% @posts.each do |post| %>
    <%= form_for post, remote: true do |f| %>
        <%=  post.content %>
        <div id="post_<%= post.id %>">
          <%= link_to "show", post, remote: true  %>
        </div>
    <% end %>
<% end %>

文章/ show.js.erb

$('#edit_post_<%= @post.id %>').append('<%= j render "comments/comments" %>')

评论/ _comments.html.erb

<% @comments.each do |comment| %>
    <%= comment.content %>
<% end %>

1 个答案:

答案 0 :(得分:1)

我想你没有新评论的事件绑定。

你应该使用像

这样的东西
$('.container-of-your-comments').on('click', '.the-toggle-button', function (e) {
  // toggle
});

所以切换适用于所有(也是未来的)元素。

修改

考虑到问题的变化:如果切换意味着只隐藏整个评论列表, 你必须手动完成。

我建议你有单独的显示/隐藏按钮(你可以在改变状态时显示和隐藏按钮),因为如果没有,它会变得更复杂。

例如,在posts / index中:

<h1>Posts</h1>
<% @posts.each do |post| %>
    <%= form_for post, remote: true do |f| %>
        <%=  post.content %>
        <div id="post_<%= post.id %>">
          <%= link_to "show", post, remote: true %>
        </div>

        <div class="post-comments" id="post_comments_<%= post.id %>">
        </div>
    <% end %>
<% end %>

在comments / _comments.html.erb

<% @comments.each do |comment| %>
    <%= comment.content %>
<% end %>
<%= link_to "hide", '#', class: "hide-comments"  %>

并在posts / show.js.erb

$('#post_comments<%= @post.id %>').html('<%= j render "comments/comments" %>')

并在assets / javascripts / posts.js中(确保将其包含在您的application.js中)

$(document).ready(function() {
    $('.hide-comments').click(function(e) {
      e.preventDefault();
      $(this).parent().hide();
    });
});

backbone.js是一个很棒的工具,如果你要用这些评论做很多事情,比如CRUD等,你需要留在一个页面上 - 使用backbone.js。如果没有,坚持使用jQuery。