2011-10-04 42 views
0

我正在使用Ruby on Rails3.1.0,jquery-railsWillPaginate寶石,以便通過AJAX對項目進行分頁。如何在AJAX「分頁」視圖中保留複選框檢查狀態?

我想保持複選框檢查狀態在AJAX「分頁」視圖。也就是說,在視圖中顯示項目列表(由於性能原因 - 因爲這些項目可能很多),對於那些實施分頁的項目(每頁10項),以便具有如下的輸出:

# * `[ ]` represents a check box 
# * `[X]` represents a checked check box 
# * `Item<N>` represents a check box label 
# * `Previous`, `Next`, `1`, `2`, `...` are WillPaginate links to switch 
# between pages 

[X] Item1 
[X] Item2 
[X] Item3 
[ ] Item4 
[ ] ... 
[ ] Item10 

← Previous 1 2 3 Next → 

正常情況下,當用戶單擊Next鏈接時,它會發生,它會通過執行AJAX HTTP GET請求來呈現下一頁,其中包括接下來的10個項目。 我的問題是,如果用戶檢查一些項目(比如Item1Item2Item3有檢查狀態)然後他\她交換機頁的檢查項的狀態丟失。也就是說,當用戶回到前一頁時,Item1,Item2,Item3不會被更多檢查(以及它應該是因爲我沒有執行任何操作來保持它們的狀態)。

我想保持切換頁面上的狀態檢查我該怎麼做?你建議使用什麼方法(也許Ruby on Rails session ...)

+0

如何使用這些表單更新數據庫? –

+0

@Sławosz - 由於問題中描述的場景旨在使用* new *記錄(即在表單成功提交之前尚未在數據庫中創建的記錄),我在控制器中運行一些代碼以便在創建記錄之後處理複選框參數(即,在考慮的當前類對象實例上運行'save'方法之後)。 – user502052

+1

因此,也許隱藏的輸入(甚至每個頁面的隱藏輸入)來記住檢查。你也需要它來保存表單。每次點擊複選框將解析隱藏的輸入內容並進行更改。但如果你有時間,請使用js MVC。 –

回答

1

當您離開它時,您可以將頁面的整個DOM樹分配給數組項(按頁碼鍵入)。然後,當(如果)訪問者返回到該頁面時,您可以直接從數組中加載DOM,而不需要AJAX請求,讓複選框保持原樣並使頁面更加快速。

只要您的複選框的onclick偵聽器位於樹上的DOM節點上,而不是您正在交換的內容,這將工作正常。如果沒有任何意義,那麼查看事件冒泡 - 它很有趣! :)

+0

它對我來說很有意義,但是您能否提供一個簡單的示例實現來分配通過JavaScript按頁碼鍵入的項目數組? – user502052

1

如果你的應用有這樣更復雜的用戶界面,也許最好是提供一些JavaScript MVC庫像sproutcore或主幹?然後,每個複選框都將是由庫存儲在內部的模型實例。

相關問題