2012-03-22 2 views
0

Donc, je suis tombé sur un problème très intéressant en jouant avec le téléchargement de fichiers à distance avec Remotipart. J'ai essayé les deux versions suivantes dans mon update.js.erb vue, que le serveur envoie après un chargement de fichier réussi:Javascript et Remotipart - Pourquoi les guillemets simples et les guillemets sont-ils importants?

<%= remotipart_response do %> 
    $("#container").html('<p>Success!</p><%= link_to('Back', gallery_items_path, :remote => true) %>'); 
<% end %> 

et

<%= remotipart_response do %> 
    $("#container").html("<p>Success!</p><%= link_to('Back', gallery_items_path, :remote => true) %>"); 
<% end %> 

Version on change avec succès le balisage dans #container, et la version deux échoue sans aucune erreur, côté serveur ou client. Je pensais que les guillemets simples et doubles ne sont un problème que lorsque JSON est en jeu, mais il semble que j'avais tort. J'ai également remarqué que le Remotipart example utilise des guillemets simples exclusivement, et je ne suis pas sûr que ce soit intentionnel ou non.

J'utilise Rails 3.2.1, 1.0.2 Remotipart et (ne sais pas si cette question est importante) Chrome 17.

Est-ce que quelqu'un sait ce qui cause cela?

EDIT: En réponse à la question d'Alex:

Dans le premier cas, la sortie rendue est, comme prévu:

<div id="container"> 
    <p>Success!</p> 
    <a href="/gallery_items" data-remote="true">Back</a> 
</div> 

Dans le second cas, comme je l'ai dit, il n'y avait pas de changement dans le contenu de <div id="container">.

+1

Quelle est la sortie rendue? –

+0

@AlexK., J'ai mis à jour le poste. – Andrey

Répondre

0

Les js réels transmis au navigateur dans le 2ème cas est;

$("#container").html("<p>Success!</p><a href="/gallery_items" data-remote="true">Back</a>"); 

La chaîne extérieure est enfermé dans " comme séparateur, mais que le contenu contiennent également " il se casse. (x = "aa"bb" est invalide).

Le premier exemple utilise le délimiteur ', donc il n'y a pas de problème.

Pour utiliser " vous devez échapper le retour de link_to pour produire

$("#container").html("<p>Success!</p><a href=\"/gallery_items\" data-remote=\"true\">Back</a>"); 
+0

Oh wow. Je garderai cela à l'esprit pour référence future, merci. – Andrey

1

link_to génère lien étiquette avec des guillemets doubles, et il ferme les citations dans votre javascript

+0

Merci d'avoir remarqué cela! Accepté la réponse d'Alex K car elle est entrée dans un peu plus de détails. – Andrey

Questions connexes