Rails ajax jquery problem

Ok, j’ai ce problème. J’essaie d’utiliser Jquery pour charger un partiel en remplacement d’un object répertorié.

index.html.erb

<div class="style_image_" > 

loadshow:

 $(function() { $(".style_image_ a").click(function() { $(".style_image_").html("loading... ") $(".style_image_").html("") $.get(this.href, null, null, "html"); return false; }); }); 

_show.html.erb:

  

Je reçois cette erreur:

 missing ) after argument list [Break on this error] $(".style_image_").htm...scape_javascript(render("show")) %>")\n 

Il y a deux problèmes avec mon code ici. Le premier est que la fonction de clic ne cible pas le .style_image _ …. c’est-à-dire (.style_image_42) si je remplace la cible CSS par 42 au lieu de _style.id la cible de clic fonctionne; Pourquoi est-ce?

Et avec ou sans cette modification, le partiel _show n’est pas rendu et l’erreur ci-dessus est générée.

Pas vraiment bon avec Javascript aucune aide serait géniale!

Ps

L’effet que je veux vraiment ressemble à un de ces thèmes de fret super cool: http://cargocollective.com/publikspace

Merci Dan!

alt text http://s3.amazonaws.com/data.tumblr.com/tumblr_kzu1cnOUUs1qbto6oo1_1280.png?AWSAccessKeyId=0RYTHV9ChaussementServeur de RangéVersal

Bien sûr, vous pouvez avoir du code ERB dans un fichier javascript, nommez-le xxxx.js.erb et vous aurez access à tout cela.

Jetez un coup d’œil à ce lien qui montre un excellent exemple de la façon d’ajaxifier des liens en leur ajoutant simplement une classe. Ceci fait, vous pouvez classer un lien et créer un fichier .js.erb qui contiendra votre code javascript (y compris le code erb) appelé en cas de succès. et si vous devez aussi accéder à class_id, vous avez également l’identifiant de l’object. id = “yourobj _ <% = @ yourobj.id%>”


UPDATE Si javascript échoue, c’est parce que vous devez échapper vos guillemets dans la ligne générant l’erreur, comme suit:

 $(".style_image_<%= style.id %>").html("<%= escape_javascript(render(\"show\")) %>"); 

OU utilisez simplement des guillemets simples, comme suit:

 $(".style_image_<%= style.id %>").html('%= escape_javascript(render("show")) %>'); 

Cela ne fonctionne pas parce que vous ne pouvez pas avoir de code ERB dans les fichiers javascript. Tout élément compris entre <%%> dans un fichier javascript ne sera pas évalué par Rails.

Je vous conseillerais soit de charger les images avec AJAX ou simplement de les insérer dans le code HTML et d’utiliser jQuery pour les afficher ou les masquer si nécessaire.

Vous ne savez toujours pas pourquoi mon fichier js.erb ne comprend pas <% = style.id%>, ce n’est peut-être pas chose faite ici.

J’ai deux solutions à ce problème:

  1. écrivez le javascript dans le contrôleur et utilisez un link_to_remote.

  2. Charger discrètement le chemin du lien dans la DIV du lien:

Lien Image_tag comme ci-dessus!

et dans mon fichier Application.js

 $(function() { $(".style_image a").live('click', function(event) { $(this).closest(".style_teaser").load(this.href + " #show_photo"); return false; }); }); 

Avec cette méthode, si le javascript est désactivé, le lien vous mènera au chemin d’affichage de l’object.

Merci à Nick Craver de m’avoir prévenu !