2012-02-28 3 views
5

J'utilise Rails 3.0 avec le script prototype ujs rails.js.Rails UJS pour le contenu ajouté dynamiquement

J'ai quelques link_to "...", :remote => true liens qui sont ajoutés à la page après le chargement de la page, et donc après rails.js a attaché les événements ujs à tous les liens a[data-remote].

Comment obtenir des rails.js pour réanalyser de nouveaux liens? Rails.js semble se composer d'une fonction anonyme, donc je ne peux pas l'appeler directement. La seule façon que je peux penser de faire ceci est d'enrouler tous les rails.js dans ma propre fonction que je peux alors appeler au chargement de page * et * quand j'ai ajouté de nouveaux liens.

Cela semble une approche raisonnable, mais je hésite que je ne peux pas croire que je suis le premier à avoir cette question et qu'il n'y a pas un moyen standard de le faire ...

+0

Avez-vous eu de la chance avec ça? J'ai le même problème. J'utilise entre-temps button_to, ce qui me rend triste. Je ne comprends pas parce qu'il utilise 'delegate' qui est censé fournir une liaison tardive. Le délégué a également été remplacé ... mais c'est une autre question. –

Répondre

2

Quand vous êtes rendu sur un bouton, lien, etc. vous utilisez les aides rails

= link_to "Add to basket", basket_path, :method => :post, :remote => true 

vous dans la réponse de votre point de vue à distance (ex .: some_view.js.erb/some_view.js.haml) vous devrait utiliser à nouveau les aides de rails si vous voulez un : élément distant. Vous n'avez pas besoin de les réanalyser les nouveaux éléments DOM afin que le comportement à distance à attacher.

Dans la js vue, vous pouvez mettre à jour/remplacer le contenu du javascript en utilisant DOM

:plain 
     $('#some-id-selector').replaceWith("#{escape_javascript(render :partial => 'some_other_view.html.haml')}"); 

vous pouvez également regarder dans l'inspecteur réseau de votre navigateur si les nouvelles actions est en cours d'envoi.

Questions connexes