2015-01-02 19 views
1

我有一個控制器Books,在索引操作中我使用的是will_paginate。我也有過濾器冠軍作者將text_field的值傳遞給will_paginate作爲Rails參數

每次冠軍作者變化,我正在調用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 %> 

的問題是,will_paginate不會在AJAX調用後更新。默認情況下,我有45本書(每頁30本,共2頁),在AJAX調用後我得到9本書。它應該只顯示1頁,但它仍然顯示2頁。

如果我把will_paginate放在book_list裏面,它就會消失。如果我保持在外面,它不會被更新。

另一種選擇是,我可以將自定義參數傳遞給will_paginate,但我不知道如何在視圖中獲取文本字段的值,並將其作爲參數傳遞給will_paginate而無需提交。

這些輸入的形式來篩選書籍:

<div class="form-group"> 
    <%= label :title, "Title" %><br> 
    <%= text_field :book, :title, {class: 'form-control', placeholder: "Book Title" } %> 
</div> 
<div class="form-group"> 
    <%= label :authors, "Authors" %><br> 
    <%= text_field :book, :authors, {class: 'form-control', placeholder: "Authors" } %> 
</div> 

回答

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 

我所做的唯一變化是增加了:類關鍵屬性陣列,用我的自定義類IDENTIFER的價值

我包括在自定義渲染器我的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); 
      } 

在您的情況您可以添加一個「隱藏」屬性,以及一類的鏈接(屬性[:隱藏] =「假」),並設置爲「true」如果頁面不應該存在。

相關問題