我有图书的控制器,在索引操作中我正在使用 will_paginate 。我还有标题和作者的过滤器。
每次标题或作者更改时,我都会进行ajax调用以获取@books
的更新版本。
在我的index.js.erb文件中,我有我的代码来呈现视图:
$('#book_list').html("<%= escape_javascript( render('show_books') ).html_safe %>");
我的索引文件如下所示:
<%= will_paginate @books %>
<ol class="list-unstyled" id="book_list">
<%= render 'show_books' %>
</ol>
<%= will_paginate @books %>
问题是,在AJAX调用后,will_paginate
将不会更新。默认情况下我有45本书(每页30本书,共2页),在AJAX通话后我得到了9本书。它应该只显示1页,但它仍然显示2页。
如果我将will_paginate
放在 book_list 中,它就会消失。如果我留在外面就不会更新。
另一个选择是,我可以将自定义参数传递给will_paginate
,但我不知道如何在视图中获取文本字段的值并将其作为参数传递给{{1}没有提交。
这些是过滤书籍的输入表格:
will_paginate
答案 0 :(得分:1)
我试图找到一种方法来动态更改will_paginate生成的页面链接以包含来自用户的信息,我在此处看到了您的帖子Rails3: How to pass param into custom will_paginate renderer?。
在我的情况下,用户可以选择一个图表来显示will_paginate显示的数据,但默认的页面链接不会传递任何额外的参数,因此他们选择的图表不会保存在页面之间。
我的解决方案是覆盖链接,在每个链接中包含一个自定义类,然后我可以在页面目标上使用javascript并调整其属性。
这是我的覆盖代码
module Pageoverride
class PaginationListLinkRenderer < WillPaginate::ActionView::LinkRenderer
protected
def link(text, target, attributes = {})
if target.is_a? Fixnum
attributes[:rel] = rel_value(target)
target = url(target)
end
attributes[:href] = target
attributes[:class] = 'chartpagetest'
tag(:a, text, attributes)
end
end
end
我做的唯一改变是在属性数组中添加一个:class键,并使用我的自定义类标识符的值
我在will_paginate调用中包含自定义渲染器
<%= will_paginate(@dbtests, :renderer => Pageoverride::PaginationListLinkRenderer) %>
我的Javascript定位与我的类匹配的元素,我从变量“chart_id”广告中获取当前数据,并将其附加到每个元素的“href”属性的末尾。
for (index = 0; index<document.getElementsByClassName("chartpagetest").length;++index) {
document.getElementsByClassName("chartpagetest")[index].setAttribute('href',document.getElementsByClassName("chartpagetest")[index].getAttribute('href') + "&chart="+chart_id);
}
在您的情况下,您可以在链接中添加“隐藏”属性和类(属性[:hidden] ='false'),如果页面不再存在,则将其设置为“true”存在。