J'ai une application Web qui permet aux utilisateurs de modifier les données du modèle via une fenêtre contextuelle. Lorsque le formulaire de fenêtre contextuelle est terminé, l'utilisateur clique sur un bouton "Enregistrer", la fenêtre se ferme et la page d'origine est rechargée pour afficher toutes les mises à jour qui ont été apportées aux données.Méthode du contrôleur Rails pour enregistrer le modèle et fermer la fenêtre contextuelle
Ma technique ne fonctionne que rarement. Je ne peux pas pour la vie de moi comprendre pourquoi cela fonctionne une fois et pourquoi pas un autre.
Dans ma forme de fenêtre pop-up, j'ai ce que la méthode soumettre:
<%= submit_tag("Update Invoice", {:onclick=>"refreshParent()"}) %>
Ainsi, le Javascript est exécuté idéalement en même temps que le formulaire est soumis au contrôleur. Voici le refreshParent() fonction Javascript:
function refreshParent(id) {
window.opener.location.reload();
window.close();
}
Maintenant, la méthode appelée par ma forme (« mise à jour » dans ce cas) ne dispose pas d'un appel de méthode redirect_to, mais même quand je fais (par exemple, à la vue originale, index) cela ne semble pas avoir d'importance.
À la racine, il semble que ma méthode de contrôleur ne se déclenche pas sur le formulaire. Parfois. Je peux soumettre plusieurs fois les mêmes données de formulaire, et cela fonctionnera une troisième fois. Ou parfois ça marche tout de suite. C'est totalement aléatoire.
Que puis-je faire pour m'assurer que les méthodes de mon contrôleur se déclenchent lorsque vous fermez une fenêtre contextuelle?
Merci, Aaron.
Ah, votre commentaire a fait sonner une cloche dans ma tête! Au lieu d'appeler form_for sur mon formulaire contextuel, j'ai appelé remote_form_for et supprimé l'événement onclick du bouton de soumission. Puis dans le RJS je viens d'entrer les mêmes appels pour fermer la fenêtre et recharger le parent que j'avais dans la fonction séparée: page << "window.opener.location.reload();" page << "window.close();" Boom! Tout fonctionne bien! Merci beaucoup pour vos conseils; pas de jQuery nécessaire! –
J'utilise jQuery avec Rails depuis un moment maintenant et j'ai complètement oublié tous les assistants JS que Rails a intégrés. Heureusement, j'ai pu donner de l'inspiration! –