Dans un projet Ruby on Rails, une fonction JavaScript doit être exécutée à la fin d'un appel Ajax. Mon problème est que les valeurs passées dans la fonction JavaScript appelée avec page.call sont enveloppées entre guillemets. Pas trop de problème si vous passez des chaînes mais l'une des valeurs est une représentation sous forme de chaîne d'un tableau JavaScript, c'est-à-dire [0,1,2,3].Passer des objets de Rails RJS à un appel de fonction javascript sans en indiquer les valeurs?
Voici ce que je pense être les extraits de code importants.
J'ai un observ_field qui regarde une liste déroulante de sélection.
<%= observe_field("project_select_list",
:loading => "Element.show('tree_indicator')",
:complete => "Element.hide('tree_indicator')",
:url => {:controller => "projects", :action => "change_project"},
:with => "id")
%>
Dans le project_controller
def change_project()
@current_project = Project.find(params[:id])
end
Et dans change_project.rjs
page.replace_html("project_name", @current_project.name)
page.visual_effect(:highlight, "project_name")
page.call("buildYUITreeView", "project_tree", @current_project.get_directory_contents(@current_project.local_path, 0))
La dernière valeur:
@current_project.get_directory_contents(@current_project.local_path, 0))
est ce qui me cause des problèmes. Je veux juste qu'il envoie la valeur, par exemple [0,1,2,3], mais il envoie "[0,1,2,3]" qui fait sauter le JS.
Ce partiel fait ce qu'il est censé faire en ce sens qu'il envoie les données et non une chaîne au code JavaScript qui est placé sur la page.
<% javascript_tag do -%>
YAHOO.util.Event.addListener("dom:loaded", "load", buildYUITreeView("<%= tree_id %>", <%= project.get_directory_contents(project.local_path, 0) %>));
<% end -%>
Dans cet esprit, je suis jouer avec l'aide d'une partielle et juste rendre appeler la fonction JS quand je dois, mais cela semble être un hack.
Comment faire pour que page.call n'enveloppe pas les données envoyées comme des paramètres entre guillemets, ou comment dois-je faire pour transmettre ces données à la fonction JS pour exécution après la fin de l'appel Ajax?
Merci pour la réponse, mais .. Je pense que vous avez échoué à répondre à la bonne question. Mon problème est avec le page.call ("buildYUITreeView", "project_tree", @ current_project.get_directory_contents (@ current_project.local_path, 0)) appel dans le fichier RJS pas dans le partiel. –
Ok, gotcha. Désolé je n'ai pas lu assez près. Modifier la réponse – tom