2012-09-28 36 views
1

我非常感謝展示jQuery功能記憶狀態的代碼片段,例如, .slideToggle()。如何讓jQuery在Rails應用程序中記住狀態?

我讀過關於本地存儲,會話存儲,ajax等 - 哪些技術是首選2012年以及Ruby in Rails 3.2中的實現如何?

+0

對於clarificaions: 1.真正的代碼示例如何解決這將是比一般的directons更讚賞。 2.一個簡單的用戶案例可能是側邊欄中某個可摺疊網頁上的一個小部件,所以如果我隱藏它並離開頁面 - 一旦我回到該頁面上,它仍然隱藏。 –

回答

1

有多種方法可以做到這一點。要存儲在URL作爲參數(從PARAMS訪問[]哈希在軌)一個變量,在JavaScript中,你可以寫類似(從this question所採取的示例)

$.ajax({ 
    data:{"toggle":state}, # This stores the toggle variable in the 
          # url like so: http://localhost:3000/?toggle=1 
    # Other stuff }); 

如果你想要的東西多一點耐用,嘗試一個餅乾。在Rails3中有一個cookie []哈希值(不確定關於rails2)。 session []散列也被默認保存爲一個cookie。您可以查看使用cookies []散列的railscast on making a "remember me" login function。另請參閱docs on the Cookie class in Rails3,它可以很好地解釋您可用的各種選項和方法。

使用jQuery,您顯然需要一個插件作爲讀取/寫入cookie的功能,jQuery不會自動出現(我很驚訝地發現)。這裏有一個在github上,這似乎是recommened,並有一些好的文檔,雖然我還沒有使用它:https://github.com/carhartl/jquery-cookie

+0

感謝您讓我走向正確的方向。我在下面描述了我的最終解決方案。 –

0

如果您希望能夠在的任何時候檢索的狀態,我會爲要保存的案例創建記錄。名稱,值和可能的頁面。然後,您可以在創建頁面時檢索這些值,並使用這些值代替硬編碼值。

0

HTTP本身是無狀態的,這意味着你必須將數據存儲在某個地方(jQuery不會「記住」任何東西)。根據您的預期用途,切換字段的狀態可以存儲在後端數據庫中,或存儲在用戶瀏覽器中的cookie中。

2

上RC這個情節告訴我如何解決這個問題,幾乎所有的信息:http://railscasts.com/episodes/136-jquery-ajax-revised

我創建與遙控器的ajaxed鏈接:在視圖中爲true。該鏈接還會呈現從會話中的布爾值檢索的動態類。

<%= link_to "Click here", {action: 'retain_widget_state'}, id: "switcher", class: "#{session[:switch]}", remote: true %> 

我在控制器中添加了一個空行爲。然後在retain_widget_state.js.erb中我有下面的代碼。在其中,我在會話中切換狀態,然後通過點擊上面的鏈接來運行顯示或隱藏元素的jQuery代碼。

<% session[:switch] = true if session[:switch] == nil %> 
<% if session[:switch] == false %> 
    <% session[:switch] = true %> 
    $('.company_view').slideDown(400); 
<% elsif session[:switch] == true %> 
    <% session[:switch] = false %> 
    $('.company_view').slideUp(400); 
<% end %> 

包裝在$(document).ready(function(){});我把條件代碼在頁面的刷新可以「記住」切換的狀態:

if ($('#switcher.true').length) { 
    $('.company_view').display(); 
} 
else if ($('#switcher.false').length) { 
    $('.company_view').hide(); 
}; 
相關問題