.slideToggle() など、状態を記憶する jQuery 機能を示すコード スニペットがあれば、非常にありがたいです。
ローカル ストレージ、セッション ストレージ、ajax などについて読んだことがあります。
.slideToggle() など、状態を記憶する jQuery 機能を示すコード スニペットがあれば、非常にありがたいです。
ローカル ストレージ、セッション ストレージ、ajax などについて読んだことがあります。
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();
};
これを行う方法は複数あります。url に変数をパラメーターとして格納するには (レールの 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 として保存されます。Cookie[] ハッシュを使用した「remember me」ログイン機能の作成に関するこの Railscast を確認できます。また、Rails3 の Cookie クラスに関するドキュメントも参照してください。さまざまなオプションと利用可能なメソッドのかなり良い説明が記載されています。
jQuery では、jQuery で Cookie を読み書きする機能が自動的に存在しないため、プラグインが必要になるようです (それを見つけて驚きました)。私はそれを使用していませんが、これは推奨されていると思われるgithubの1つであり、いくつかの優れたドキュメントがあります:https://github.com/carhartl/jquery-cookie
HTTP自体はステートレスです。つまり、データをどこかに保存する必要があります(jQueryは何も「記憶」しません)。使用目的に応じて、トグルフィールドの状態をバックエンドデータベースに保存するか、ユーザーのブラウザのCookieに保存することができます。
いつでも状態を取得できるようにしたい場合は、保存したいケースのレコードを作成します。名前、値、場合によってはページ。次に、ページの作成時にこれらの値を取得し、ハードコードされた値の代わりにそれらの値を使用できます。