1

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

我已经阅读了有关本地存储、会话存储、ajax 等的信息 - 2012 年首选哪种技术以及 Rails 3.2 中的 Ruby 中的实现如何?

4

4 回答 4

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

包裹在 $(document).ready(function() {}); 我在刷新页面时放置了“记住”切换状态的条件代码:

if ($('#switcher.true').length) {
    $('.company_view').display();
}
else if ($('#switcher.false').length) {
    $('.company_view').hide();
};
于 2012-10-30T17:48:12.650 回答
1

有不止一种方法可以做到这一点。要将变量作为参数存储在 url 中(可从 rails 中的 params[] 哈希访问),在您的 javascript 中您可以编写类似的内容(示例取自这个问题

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

如果你想要一些更耐用的东西,试试饼干。Rails3 中有一个 cookies[] 哈希(不确定 rails2)。session[] 散列默认情况下也存储为 cookie。您可以查看此railscast 制作使用 cookies[] 哈希的“记住我”登录功能。另请参阅Rails3 中 Cookie 类的文档,它很好地解释了您可用的各种选项和方法。

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

于 2012-09-28T17:27:08.723 回答
0

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

于 2012-09-28T16:08:02.900 回答
0

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

于 2012-09-28T16:11:44.593 回答