如何让jQuery在Rails应用程序中记住状态?

时间:2012-09-28 15:57:44

标签: javascript jquery ruby-on-rails ruby-on-rails-3

我非常感谢一段代码片段,展示了记住状态的jQuery功能,例如: .slideToggle()。

我已经阅读过本地存储,会话存储,ajax等等 - 2012年首选的技术是什么?如何在Ruby in Rails 3.2中实现它?

4 个答案:

答案 0 :(得分:2)

RC上的这一集几乎给了我关于如何解决它的所有信息:http://railscasts.com/episodes/136-jquery-ajax-revised

我在视图中创建了一个带有remote:true的ajaxed链接。此链接还呈现从会话中的布尔值检索的动态类。

<%= 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 %>

包装在$(文件).ready(function(){});在刷新页面时,我将条件代码“记住”切换状态:

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

答案 1 :(得分:1)

这样做的方法不止一种。要将变量存储在url中作为参数(可以从rails中的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 });

如果您想要更耐用的东西,请尝试使用cookie。 Rails3中有一个cookies []哈希(不确定rails2)。 session []哈希默认也存储为cookie。您可以查看使用cookies []哈希的railscast on making a "remember me" login function。另请参阅docs on the Cookie class in Rails3,它可以很好地解释您可以使用的各种选项和方法。

使用jQuery,你显然需要一个插件,因为使用jQuery读取/写入cookie的功能不会自动出现(我很惊讶地发现)。这是github上的一个似乎被推荐并且有一些很好的文档,虽然我还没有使用它:https://github.com/carhartl/jquery-cookie

答案 2 :(得分:0)

如果您希望能够在任何时候检索状态,我会为您要保存的案例创建记录。名称,价值和可能的页面。然后,您可以在创建页面时检索这些值,并使用这些值而不是硬编码值。

答案 3 :(得分:0)

HTTP本身就是无状态的,这意味着你必须将数据存储在某个地方(jQuery不会“记住”任何东西)。根据您的预期用途,切换字段的状态可以存储在后端数据库中,也可以存储在用户浏览器的cookie中。