2010-11-25 3 views
0

donc j'ai fait plusieurs tentatives à ce sujet, mais j'ai décidé que j'avais besoin de quelques conseils de la communauté concernant les meilleures pratiques. voici ce que j'essaie de faire.enregistrer l'état avec javascript dans les rails

J'ai plusieurs éléments dans plusieurs vues que j'utilise jquery pour les afficher ou les masquer. ce que je veux faire est de sauver l'état d'eux afin qu'ils soient persistants à travers les demandes. (c'est-à-dire, si un utilisateur a panneau1, mais panneau2 caché, quand ils rafraîchissent, ils restent comme ça)

Je pensais chaque fois qu'un utilisateur bascule un élément, je pourrais enregistrer la valeur d'affichage CSS de cet élément dans une session. Après chaque chargement de page, je pourrais utiliser le sélecteur .class de jquery pour obtenir tous les éléments avec une classe de 'toggle' et l'appliquer à ces éléments.

l'idée semble bonne, mais je ne suis pas assez avertis pour y arriver. Je ne suis pas sûr de savoir comment exécuter le javascript, et lui faire analyser le code ruby, autre que d'avoir un appel ajax un. Js.Berb pour cette vue. Je l'ai joué avec lui pendant des heures, sans succès. Est-ce que quelqu'un a des suggestions qui me permettraient de commencer dans la bonne direction?

Répondre

1

Peut-être une approche plus simple consisterait à utiliser des cookies pour sauvegarder l'état de vos bascules. Cela pourrait être fait avec jQuery/JavaScript et éliminer complètement le besoin d'avoir Rails s'inquiéter à ce sujet.

+0

parfois vous obtenez jusqu'à présent dans un trou de lapin que vous oubliez il y a d'autres trous. C'est une solution beaucoup plus simple. Merci! – brewster

0

Je pense qu'il y a deux façons de procéder.

1) Vous mentionnez la première qui est très temporaire: informations d'économie en session ou dans le cache

2) Si vous voulez persistante: Enregistrez l'état de votre utilisateur actuel dans la base de données et dans votre cache accès rapide.

Les deux nécessitent une requête ajax que vous devez gérer pour informer votre serveur de ce qui se passe. J'utiliserais certaines fonctions de jQuery: cliquez puis bascule ce qui ajouterait ou enlèverait une classe 'cachée' (qui serait un simple 'display: none;' dans votre CSS). Je garderais ces fonctions du côté client (n'utilisant pas js.erj ni rjs).

En plus de la bascule, j'enverrais la requête ajax avec un booléen basé sur la présence ou l'absence de classe 'cachée' dans le panneau que l'utilisateur clique. Cela ne ferait que rendre: text => 'status saved' ou 'status not saved'. Lorsque la page est chargée pour la première fois, ajoutez simplement <% = 'hidden' si panel1_show == true%> à la classe de chaque panneau.

Espoirs cette aide,

Ben

+0

puisque je ne m'inquiète pas vraiment si elles sont persistantes à travers les sessions, juste à travers plusieurs demandes de page, je suis allé avec la solution de cookie et me suis épargné de faire toutes les demandes ajax entièrement. – brewster

Questions connexes