我有一个微博/短信系统,每次新的微博或评论/消息被提交,页面刷新,以显示它。
由于我已经使用:remote => true在我的表单上设置了ajax,所以我现在希望在不刷新页面的情况下使用micropost或添加。
到目前为止,我已经:
class MicropostsController < ApplicationController
def create
if params[:micropost][:user_id].to_i == current_user.id
@comment = Comment.new(:user_id => current_user.id)
respond_to do |format|
if @micropost.save
format.js { render :post_on_wall }
else
format.js { render :form_errors }
end
end
else如果表单通过了所有验证,并且用户在单击post之前实际上输入了一些有效的内容,那么"if @micropost.save“将是真的,它将在我命名为"post_on_wall”的文件中执行js。如果"@micropost.save“,则"form_errors”中的代码将被执行。
在form_errors中,我添加了一个警告,只是为了检查当用户输入任何内容并单击post时,微博并没有被发布。效果很好。
在"post_on_wall“文件中,我有以下内容:
$('.microposts').prepend('<%= j render("users/partials/microposts") %>');这方面的问题是,它基本上抓取了正在呈现的"users/partials/microposts“文件中的所有微柱,然后将它们放在".microposts”div中的所有内容之上。即使是发布位于".microposts“顶部的微博的实际表单也被推倒在刚刚添加到页面的内容下面。在本例中,当我使用分页时,下面有10个空格,并将per_page设置为10。
这是我的html结构。
<div class='cf' id='content'>
<div id='leftColumn'>
</div>
<div class='microposts'>
</div>
<div id='rightColumn'>
</div>
</div>每个微博及其相关注释都存储在一个名为".postHolder“的类中。
我觉得我走错路了。这个文件是:"users/partials/ microposts“指向的基本上是代码,它可以帮助一次显示多个微博(10)。这是用于与我所做的完全不同的事情(分页+无休止的滚动)。
无论如何,我觉得我应该如何接近这是如何发现新的帖子,刚刚发布。它应该被检测为一个新的".postHolder“类,然后在找到它之后,应该将它添加到”postHolder“列表的顶部,而不是替换它上面的微博表格。
我想创建一个单独的div来保存所有的微博,然后把这个div放在微博的下面。那样的话,我就不需要担心表单会被向下推,因为它不会在包含所有微柱的div中,实际上,这就是我将要预先准备的。
这仍然给我留下了一个问题,那就是得到刚刚发布的帖子,然后把它添加到列表的首位。
无论如何,我真的很想要一个例子或一些好的建议,可以帮助我实现这个特性。
谢谢你抽出时间问候我。
发布于 2012-04-09 19:52:31
使用当前的HTML/分部结构,只需这样做即可(替换整个微柱,因为这就是部分创建的内容)。
$('.microposts').html('<%= escape_javascript render("users/partials/microposts") %>');但是,在未来,有一个_micropost部分呈现微博,然后你可以很容易地只在.microposts顶部的微博。
https://stackoverflow.com/questions/10077713
复制相似问题