Les meilleures pratiques pour le chargement de la page de contenu via une requête AJAX dans Rails3?
Supposons que vous avez une page avec deux colonnes de contenu. Pour quelque raison que ce soit, vous souhaitez récupérer le contenu HTML de l'une de ces colonnes une fois la page chargée, via une requête AJAX. L'utilisateur n'a pas besoin de prendre une action pour rendre le contenu de la charge (pas de lien ou en cliquant sur les soumissions de formulaire), il se fait automatiquement.
Je peux facilement le faire en retournant un espace réservé vide div dans la réponse principale
<div id="pink-dancing-elephants"></div>
et puis ajouter un peu de jQuery pour la page
$.ajax({
url: "/elephants/dancing/pink",
cache: false,
success: function(html){
$("#pink-dancing-elephants").append(html);
}
});
et de l'action que les réactions à l' /éléphants/danse/rose de retour de la goutte correspondante de HTML.
Tout cela fonctionne bien, mais je me demande si je suis absent quelques Rails3 fonctionnalité qui permettrait de rendre cela plus facile. E. g. Je suis à la recherche de la capacité à être capable de mettre quelque chose comme ce qui suit dans la vue principale et le reste de la il advenir par "magie"
<%= render :url=>"/elephants/dancing/pink", :remote => true %>
Suis-je raté quelque chose?
OriginalL'auteur cailinanne | 2011-06-02
Vous devez vous connecter pour publier un commentaire.
Je suis en utilisant la méthode décrite dans @cailinanne commentaire Dan L du post et ça a bien fonctionné pour moi. J'aime la lisibilité de la balise de données qui est attachée à la div. Dans votre code html, vous pouvez voir exactement ce qui va se charger dans la div, et vous n'avez pas à ajouter de tout nouveaux JS si vous voulez ajouter cette fonctionnalité à plusieurs divs ou des pages.
Prendre à partir de cet article: http://tech.thereq.com/post/16479390885/loading-page-content-via-ajax-in-rails-3-1
La façon la plus simple pour ce faire utiliser la méthode load de jQuery.
L'ennui, la partie est de l'AJAX chemin (/blogs/2/observations) change en fonction du blog, nous consultez. Si nous avons suivi le jQuery documentation exactement, nous pourrions simplement plop une balise script dans le milieu de notre corps HTML, de sorte que, dans notre fichier de modèle, nous pourrions avoir quelque chose comme
Beurk. Pas un fan de javascript mélangé dans mes fichiers de modèle.
Quoi faire à la place? Suivre le modèle proposé par les Rails UJS et de prendre avantage de la nouvelle HTML attributs data -.
Tout d'abord, lorsque vous voulez charger le contenu AJAX dans une page web, procédez de la manière suivante dans votre modèle
Ensuite, ajoutez les lignes suivantes à votre application.js
Troisième, définissez un itinéraire qui correspond à une requête get à blog_comments (type
rake routes
pour voir comment vos itinéraires sont nommés)Et le tour est joué! Vos commentaires div magie être rempli par tout ce qui est retourné par l' /blogs/3/observations chemin!
OriginalL'auteur
Je pense que j'ai décrit est en fait la meilleure approche.
La première à mettre un vide, un espace réservé div dans votre vue principale
et puis ajouter un peu de jQuery pour la page
et de l'action que les réponses /posts/retour récent 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 views/posts/récent.html.erb et alors le jQuery prendra soin d'insérer le rendu du contenu dans votre espace réservé div.
OriginalL'auteur
Il existe un moyen simple ofcource, il suffit d'ajouter
respond_to :html, :js
à votre contrôleur et créer *.js.erb vues dans votre app/views/. Votre contrôleur sera alors en mesure de répondre à javascript format et vous pouvez écrire du code javascript avec le code ruby dans *.js.erb fichiers.Check this out: Javascript discret dans Rails 3
Je ne suis pas sûr que je vous comprends, tu veux dire quoi par '..pour charger le contenu dans la page, sans que l'utilisateur de prendre toute action", à la charge de tout contenu que vous devriez le coup côté client pour envoyer la demande de toute façon (il peut être la soumission de formulaire, en cliquant sur le lien ou l'interrogation de la pratique(c'est lors du chargement d'une page de contenu par minuterie (comme Twitter)) )
Si vous le souhaitez, vous pouvez chercher une autre railscast appelé "l'Interrogation des modifications" par Ryan Bates, il explique la technique d'interrogation
OriginalL'auteur
Si vous souhaitez utiliser l'approche de l'OP proposé, je vous recommande de le déplacer vers un autre application.js fichier et l'utilisation discrète de JS. Je ne recommande pas de mettre le JS inline sur la page elle-même.
Cette lance la requête ajax automatiquement sans que vous ayez à le mettre sur chaque page. C'est une meilleure pratique. Je ne dirais pas optimale, mais un peu m
OriginalL'auteur