1

我正在创建一个小型博客应用程序来学习 Rails - 用户可以登录、创建帖子和评论其他用户的帖子。现在我正在将 Ajax 添加到“添加您的评论”页面,并且在途中遇到了一些设计问题。页面流程如下所示:

# post section
 :post.title here
 :post.username here
 :post.created_at here
 :post.body here

# comments section (sorted by date of creation):
:number of comments here

:first comment
:second comment
...
:last comment

# add comment section
:text_area here
:submit button here

问题:

1 - 评论按创建日期排序,因此我的 ajax 调用将新评论添加到页面顶部。如果我改变排序行为,ajax 代码就会被破坏。

2 - 一个评论div可以有 3 个 css 类:.odd、.even 或 .admin(如果评论是由管理员用户进行的,则应用周期奇数/偶数或管理员)。现在我正在对这些类名进行硬编码,并使用一些 if 来获得正确的类名。这也很糟糕,如果更改 css 类名,ajax 代码就会损坏。

我怎样才能避免这些事情,或者至少改善?这是我的 create.js.erb:

var div = $('#comments_div');
var comment_class = div.children().first().attr('class')
var new_class;

<% if current_user.admin == 1 %>
    new_class = 'comment_body_admin'
<% else %>
if (comment_class === 'comment_body_odd')
    new_class = 'comment_body_even'
else
    new_class = 'comment_body_odd'
<% end %>

var new_div = $('#comments_div').prepend("<%= j render @comment %>");
new_div.children().first().attr('class', new_class)

谢谢你的帮助!

4

1 回答 1

0

1 - 除了颠倒创建的顺序之外,您将如何更改评论排序?在这种情况下,您需要让 create.js.erb 知道排序顺序并使用 append 而不是 prepend。

2 - 为管理员应用“admin”类,但将奇偶条带留给 CSS。这样的事情应该这样做:

.comment:nth-child(2n) { background: #eeeeee; }

此外,在将节点插入 DOM 之前构建节点并操作其属性会更有效:

var comment = $("<%= j render @comment %>").addClass('comment')
comment.addClass(new_class)
$('#comments_div').prepend(comment)
于 2013-06-12T16:15:04.937 回答