【发布时间】:2012-04-09 16:10:20
【问题描述】:
我有一个微博/评论系统,每次提交新的微博或评论时,页面都会刷新以显示它。
由于我已经在我的表单上设置了 ajax,我现在希望在不刷新页面的情况下添加或添加微博。
到目前为止,我有:
if @micropost.save
format.js { render :post_on_wall }
else
format.js { render :form_errors }
end
您无需成为 ruby on rails 专家即可了解此 sn-p 中发生了什么。如果表单通过了所有验证并且用户在单击发布之前实际上输入了有效的内容,那么“如果@micropost.save”将为真,它将在我命名为“post_on_wall”的文件中执行 js。如果 if "@micropost.save" 将执行 "form_errors" 中的代码。
在 form_errors 中,我添加了一个警报,只是为了检查当用户没有输入任何内容并点击帖子时,微博不会被发布。它工作正常。
在“post_on_wall”文件中我有这个:
$('.microposts').prepend('<%= j render("users/partials/microposts") %>');
这样做的问题是它基本上抓取了在“users/partials/microposts”呈现的文件中循环的所有微帖子,然后将它们放在“.microposts”中的所有内容之上分区。甚至位于“.microposts”顶部的实际发布微博的表单也会被推到刚刚添加到页面的内容下方。
这是我的 html 结构。
<div class='cf' id='content'>
<div id='leftColumn'>
</div>
<div class='microposts'>
</div>
<div id='rightColumn'>
</div>
</div>
每个微帖子及其关联的 cmets 都存储在一个名为“.postHolder”的类中。
我觉得我做错了。这个:“users/partials/microposts”指向的文件基本上有代码可以帮助一次显示 10 个微帖子。这用于与我正在尝试做的完全不同的事情(分页+无限滚动)。
无论如何,我觉得我应该处理的方法是如何检测刚刚发布的新帖子。它应该被检测为一个新的“.postHolder”类,然后在找到它后应该将它添加到“postHolder”列表的顶部,而不是替换它上面的微帖子表单。
我正在考虑创建一个单独的 div 来保存所有微帖子,然后将此 div 放在微帖子表单下面。这样我就不用担心表单被推下,因为它不会在里面包含所有 microposts 的 div,实际上我将要添加这些微博。
无论如何,我真的很想要一个示例或一些好的建议来帮助我实现此功能。
感谢您的宝贵时间 亲切的问候。
【问题讨论】:
-
所以你的问题是你的微博被插入到 DOM 中的位置?
-
那你为什么不在
.postHolder前面加上呢? -
因为 .postHolder 是一个保存每个微博的类。这只会将所有循环的微帖子添加到页面上的 .postHolder 类中。
-
d_inevitable:我要做的是通过它的类检测新发布的评论,然后添加它。
-
过滤
.postHolder只显示最后x 个帖子对您有帮助吗?还是给每个帖子一个唯一的ID?
标签: javascript ajax jquery