2010-05-20 4 views
0

J'ai écrit un module rails qui génère du Javascript pour une carte Google. Comme l'utilisateur fait des changements sur la page Web, j'utilise observe_field pour rappeler le serveur pour régénérer le Javascript de la carte (sans mettre à jour toute la page). J'ai du mal à trouver un bon moyen d'insérer le nouveau Javascript dans la page. J'ai essayéChargement de javascript non-RJS via ajax dans Rails

<div id='my_div_1'>div1</div> 
<%= 
    update_page_tag do |page| 
    page.replace_html 'my_div_1', "<script>alert('hi');</script>" 
    end 
%> 

mais il semble que replace_html ne fonctionne que pour HTML non-script. Il s'étouffe lorsque le contenu inclut la balise de fermeture </script>.

Voici une page que je pense est la racine du problème: http://www.wwco.com/~wls/blog/2007/04/25/using-script-in-a-javascript-literal/

Répondre

0

Voici une chose que j'ai essayé ce genre de-travaillé.

J'ai ajouté un observ_field à la page, puis j'ai utilisé Ajax.Updater du prototype pour obtenir le javascript de la carte. Cela fonctionne environ 95% du temps, mais je ne crois pas que ce soit le dernier 5%. Après le téléchargement et l'exécution du javascript, il appelle une fonction init_map globale qui a été définie dans le téléchargement.

<% observe_field(:id_of_field_to_watch, 
:function => " 
new Ajax.Updater('map_id', '/filter/map', 
{ 
    evalscripts: true, 
    onComplete: function() { init_map() } 
}); 
") 
%> 
0

Ce que je fini par faire, était de se débarrasser du javascript dynamique et au lieu configuration la carte pour être entraîné par une structure de données JSON. Donc, quand les marqueurs de la carte changent, je télécharge du json à travers la méthode replace_html de rails et je les charge dans la carte.

Questions connexes