Comment asynchrone charge partielle d'une page dans les rails
Dans la création de ruby on rails /jquery app, il y a une partie d'une page qui demande beaucoup de temps pour générer.
Je veux changer la façon dont la page est chargée de sorte que la plupart du chargement de la page tout de suite, et un espace réservé est réservé pour le temps de charger de manière asynchrone, et d'être injecté dans la page avec ajax /jquery quand c'est fini.
Ce que j'ai maintenant (simplifié):
app/views/échantillon/montrer.html.erb:
<div id="theResult">
<%= render :partial => 'calculate', :object => @org) %>
</div>
et l'partielle va utiliser certaines parties @org pour générer un contenu (de frapper un autre externe service REST).
app/views/échantillon/_calculate.html.erb
<%
# code to take org and turn it into content
%>
<!--...html to display results here -->
Je réalise que c'est probablement la rupture de la bonne architecture MVC règles depuis mon partiel semble avoir trop de logique, et souhaitez nettoyer jusqu'ainsi...
Donc je suppose que j'ai deux questions en une: (1) comment puis-je obtenir ce travail, et (2) comment dois-je nettoyer ce jusqu'à suivre une bonne connaissance de ruby/rails/mvc pratiques?
Vous devez vous connecter pour publier un commentaire.
La première à mettre un vide, un espace réservé div dans la réponse principale
et puis ajouter un peu de jQuery pour la page
et de l'action que les réactions à l' /éléphants/danse/rose de retour de la goutte de HTML que vous souhaitez avoir à la remplir jusqu'à la div. Dans l'action qui est appelée par la requête AJAX, vous aurez envie de rendre avec :layout => false pour garder le retour de l'objet blob de HTML à partir, y compris la totalité de l'image. E. g.
Cela rendrait le modèle dans les vues/éléphants/danse.html.erb.
render :layout => false
au premier rendez-vous, sans les modifier.Il y a un moyen plus simple de le faire par rapport à @cailinanne.
À l'aide de son même exemple, mais j'ai tendance à utiliser cette technique pour mettre à jour un div, donc mon div faudrait d'abord que partielle:
Mais ensuite utiliser la méthode load de jQuery:
Ce sera le retour de l'ensemble de la partielle. Assurez-vous d'utiliser la mise en page: false, et de définir éventuellement des paramètres. J'ai tendance à utiliser un partiel comme ce
Cela rendrait le modèle dans les vues/éléphants/_dancing.html.erb.
NOTE le caractère de soulignement dans le nom partiel de la méthode de contrôleur et comment vous ne l'utilisez pas lors de l'appel d'afficher dans la vue.
render ...
à la fois le modèle et le contrôleurrender
est pour le premier chargement; le contrôleur est pour la suite async mises à jour.