jquery和控制器问题,无休止的页面滚动

jquery和控制器问题,无休止的页面滚动,jquery,ruby-on-rails,Jquery,Ruby On Rails,我最近实现了无休止的页面滚动,如中所示。总之,我在一个页面上显示了10篇文章,当用户到达页面底部时,应用程序向索引操作发出“get”请求,再加载10篇文章,并使用jquery将它们附加到页面上 以下是我的实现: 后置控制器 def index if params[:tags] @posts = Post.tagged_with(params[:tags]).paginate(:page => params[:page], :per_page => 10) else @post

我最近实现了无休止的页面滚动,如中所示。总之,我在一个页面上显示了10篇文章,当用户到达页面底部时,应用程序向索引操作发出“get”请求,再加载10篇文章,并使用jquery将它们附加到页面上

以下是我的实现:

后置控制器

def index
if params[:tags]
  @posts = Post.tagged_with(params[:tags]).paginate(:page => params[:page], :per_page => 10)
else
  @posts = Post.paginate(:page => params[:page], :per_page => 10)
end

respond_to do |format|
  format.html
  format.js { render 'index.js.erb'}
end
end
index.js.erb

$('#posts').append('<%= escape_javascript(render @posts) %>');
$('a.load-more-posts').attr('href', '<%= posts_path page: @posts.next_page %>');

<% unless @posts.next_page %>
  $('a.load-more-posts').remove();
<% end %>
$('#posts')。附加('');
$('a.load-more-posts').attr('href','');
$('a.load-more-posts').remove();
我在尝试按标签筛选帖子时遇到了一些问题。根本问题在于,当用户手动单击标签以查看带有该标签的帖子时,以及通过无止境滚动功能,会触发相同的
index.js.erb
文件

当点击一个新标签时,而不是仅仅将帖子附加到现有的html中,应该首先清除显示的帖子,然后再附加新帖子

从这一点看来,我显然应该将索引操作和一个单独的
贴子(贴子)与
操作分开。此操作将有自己的js文件,非常类似,但它将替换html而不是追加

这样做的问题是,当用户向下滚动时,仍然会调用原始的
index.js.erb
,这会附加来自index action的帖子


有更好的实现方法吗?

在index.js.erb中,您可以为此更改前两行:

    $('#posts').<%= params[:tags] && params[:page].nil? ? "html" : "append" %>('<%= escape_javascript(render @posts) %>');
    $('a.load-more-posts').attr('href', '<%= posts_path page: @posts.next_page, tags: params[:tags] %>');
$('#posts')('');
$('a.load-more-posts').attr('href','');

听起来最好的方法是实现posts\u taged\u with action,这样您就可以跟踪选择了哪些标记,并像往常一样(使用append)无休止地滚动这些标记。然后,当选择另一个标记时,可以使用jquery的html方法用新集合替换内容

如果你在选择标签时滚动,你会打破无休止的滚动,对吗?你是对的。我正在编辑答案以不打破无止境。这解决了“html vs append”的问题,但标签需要传递到posts\u路径,以便无止境继续工作。当它被激发为无止境时,没有参数[:tags]更新了发送标签的答案。问题是无止境卷轴仍然会调用索引操作并添加更多非标签的帖子。你必须发布无止境的js代码。需要对其进行修改,以发布到正确的操作,并包含选定的标记