无限滚动在向下滚动到下一页时出现模板错误
Posted
技术标签:
【中文标题】无限滚动在向下滚动到下一页时出现模板错误【英文标题】:Endless Scrolling gives template error on scrolling down to next page 【发布时间】:2016-01-29 11:55:35 【问题描述】:我已经使用 will_paginate gem 完成了分页,现在我只想使用这个 gem 进行无休止的滚动,我已经关注了 railcast 和这个 SO 链接并编写了所有与此相关的代码。问题是数据很好,但是当我向下滚动到它时它在页面上重复了很多次。我不知道为什么它给这个。任何帮助都将不胜感激。
我的控制器代码:
def locations
merchants = Merchant.where("role = ?", 'Merchant')
@merchants_data = merchants.paginate(:page => params[:page], :per_page => 20)
respond_to do |format|
format.html
format.js
end
end
_location.html.erb:
<table>
<tr>
<th>
Name
</th>
</tr>
<% @merchants_data.each do |x| %>
<tr>
<td>
<%= x.name %>
</td>
</tr>
<% end %>
</table>
<%= will_paginate @merchants_data %>
home.js.coffee:
jQuery ->
if $('.pagination').length
$(window).scroll ->
url = $('.pagination .next_page').attr('href')
if url && $(window).scrollTop() > $(document).height() - $(window).height() - 50
$('.pagination').text('Fetching more locations...')
$.getScript(url)
$(window).scroll()
location.js.erb:
$('#locations').append('<%= j render partial: "locations", collection:@merchants_data %>');
<% if @merchants_data.next_page %>
$('.pagination').replaceWith('<%= j will_paginate(@merchants_data) %>');
<% else %>
$('.pagination').remove();
<% end %>
【问题讨论】:
错误信息是什么? @huanson 给 ActionView::MissingTemplate 错误。 对不起,说 exception_class 太愚蠢了!你已经说过它缺少模板。显然我们(或我)询问了它的投掷路径,所以他正在寻找哪个模板却找不到。 ;) 我已经渲染了部分并获得了数据,但问题仍然是数据重复了几次。 【参考方案1】:在您的location.js.erb
中,您正在执行render @merchants_data
,这将期望有一个部分_merchant.html.erb
,它将为该数据中的每个Merchant
实例呈现。我希望这是 rails 正在寻找的模板,而不是找到并报告错误的模板。在“渲染集合”下的rails guide on layouts and rendering 中有更多详细信息。
因此,您需要提供一个部分来渲染商家,或者稍微不同地进行渲染(太多选项无法提及)。
不过,您可能还有其他问题。我在您的 html 中没有看到任何带有 id="locations"
的内容,因此很难在其上附加任何渲染。
【讨论】:
我已经解决了这个问题,现在它正在显示下一页记录,但现在它在每次滚动时都重复相同的元素,当我们到达页面底部时,数据再次来自第三页但是每次都重复相同的记录,直到到达页面底部。 这听起来像是一个新问题。如果你已经解决了问题,那么你应该发布并回答解释解决方案是什么。 问题没有得到解决。我在页面上获得了数据,但是当我向下滚动到下一页时,数据正在重复。以上是关于无限滚动在向下滚动到下一页时出现模板错误的主要内容,如果未能解决你的问题,请参考以下文章
无限滚动 UITableView 在从服务器检索数据后向上滚动时出现故障