2009-05-12 5 views
0

J'ai une page où j'ajoute dynamiquement des éléments à une série de boîtes de sélection. J'utilise RJS pour faire ça et ça marche très bien. Maintenant, ces éléments dans le div sont une série de qui sont accompagnés de boutons Supprimer, dans le cas où l'utilisateur veut supprimer une zone de texte. Voici où je frappe un mur.Méthode RJS sortie du javascript brut

Voici le code qui exécute le bouton Supprimer. Cela fonctionne bien à ma connaissance:

<%= link_to image_tag("/images/button_delete.gif", :alt=>"Delete"), :controller=>"report", :action=>"remove", :id=>@sentence.id %> 

Dans mon contrôleur de rapport, j'ai cette méthode très simple d'être appelé par le code ci-dessus:

supprimer def @sentence_id = params [: id] fin

Encore une fois, je pense que cela fonctionne. Maintenant, quand j'activer cette action en appuyant sur le bouton, nous voilà partis dans le fichier RJS, remove.rjs:

page.remove 'sentence_'[email protected]_id 

Et voici ce que je reçois dans mon navigateur, au lieu d'un élément heureusement supprimé! Je crois comprendre que cela se produit lorsqu'il n'y a pas de page dans le contexte actuel. La documentation en ligne sur ce sujet est plutôt mince.

Toute aide appréciée! À la votre, Aaron.

Répondre

0

Puisque votre fonction remove ne semble pas réellement supprimer un enregistrement, si vous voulez simplement supprimer un élément HTML d'une page, vous pouvez utilisez link_to_function avec le prototype remove() method pour les éléments. De plus, si vous avez une version récente de Rails (par exemple, 2.3.2), vous pouvez profiter de la dom_id helper pour générer automatiquement l'attribut ID sentance_id

<%= link_to_function(image_tag("button_delete.gif", :alt=>"Delete"), "$('#{dom_id(@sentence}').remove();" %>

Une approche comme cela pourrait aider conservez le nombre de méthodes dans votre contrôleur (sauf si vous avez l'intention de faire autre chose dans le contrôleur)

1

Essayez le lien vers la télécommande. Cela va construire l'appel ajax pour vous et devrait supprimer l'élément de la page.

Ensuite, syntaxe link_to_remote est légèrement différente de la syntaxe link_to, donc ne laissez pas cela vous trébucher non plus.

0

Votre lien Supprimer est configuré comme un lien normal, à savoir

<a href="/report/remove" id="sentence_63"> 
    <img src="/images/button_delete.gif" alt="Delete" /> 
</a> 

qui déclenche une requête HTTP normale. Puisque votre intention est de déclencher une requête AJAX, essayez la recommandation de PJ Davis et utilisez link_to_remote

Questions connexes