Rails 3 – Actualisation périodique de DIV

J’essaie d’actualiser le contenu d’une div en utilisant AJAX / Unobtrusive JavaScript / JQuery.

C’est facile à faire si je crée un lien “actualiser” et lui atsortingbue un atsortingbut data-remote.

Cependant, je voudrais actualiser toutes les 2 secondes en utilisant la fonction setInterval plutôt qu’en utilisant un lien.

Ce code devrait montrer ce que j’essaie de faire. Cela ne fonctionne pas lorsqu’il est placé dans application.js, car l’ERB n’est pas évalué, mais j’espère qu’il expliquera mon objective.

setInterval(function(){ $("#scuttlebutt").html(""); },2000); 

Quelle serait une bonne façon de faire cela dans Rails 3?

(Je travaille avec Rails 3.2.5)

Ok, je vois ce que vous essayez de faire. Je l’ai déjà fait auparavant et j’ai trouvé un moyen simple de le faire.

Vous souhaitez toujours avoir le bouton qui appelle votre méthode distante dans un contrôleur qui exécute du code JavaScript sur le navigateur pour actualiser cette DIV. Je sais, je sais, vous ne voulez pas l’avoir, mais me voilà dehors. J’en ai un sur ma page, mais je l’ai caché sur le côté pour que personne ne puisse le trouver.

 :id => "refresh_button", :style => "position: absolute; left: -9999px" // Rails ERB notation 

Ensuite, j’ai ajouté ceci à ce même fichier, qui, je suppose, est un fichier .html.erb.

  

Ceci appuiera sur le bouton toutes les 2 secondes, appelant la fonction de votre télécommande comme si quelqu’un cliquait sur ce bouton toutes les deux secondes. Je sais que ce n’est pas la façon la plus propre de le faire, mais cela marche très bien tant que vous ne pouvez pas obtenir quelque chose de plus robuste pour vous. Bien que vous puissiez techniquement utiliser cela.

J’espère que cela pourra aider.

J’ai fini par mettre du code dans application.js qui:

  • Vérifier si le div existe
  • Faire une timer en utilisant setInterval
  • Demander un script js à Rails à l’URL actuelle, ce qui conduirait à l’évaluation d’un fichier de vue js.erb. Lorsque ce fichier était exécuté, il mettait à jour mon div.

Voir…

assets / javascripts / application.js

 $(function() { if ($('#scuttlebutt').length) { setInterval(function(){ $.getScript(window.location.pathname, function(data, textStatus, jqxhr) { console.log('Load was performed.'); }); },2000); } }); 

views / tickets / show.js.erb

 $("#scuttlebutt").html(" <%= escape_javascript(render 'scuttlebutt') %>" ); 

Découvrez cette question .

Il indique que les fichiers .js ne sont pas analysés comme des fichiers .erb. Ils sont passés tels quels.