2010-08-05 3 views
3

Après avoir lu quelques expériences, je pense que ce problème pourrait devoir être soulevé à nouveau. Codage dans Rails3, j'essaie d'implémenter des effets Ajax en douceur lorsqu'un utilisateur essaie de créer un post sur un autre élément de mon application. Voici le code que je suis préoccupé par:jQuery + Ajax + Haml. Les fichiers js.erb ne se déclenchent pas

app/views/posts/new.html.haml

- form_for @post, :remote=>true do |f| 
    = f.text_area :content 
    = submit_tag "Post" 

app/controllers/post_controller.rb

def create 
    @comment = Post.new(params[:post]) 
    @comment.save 
end 

app/views/posts/create.js.erb:

alert("ajax worked!"); 

J'ai suivi ce que j'ai vu sur le UJS Railscast, mais rien ne semble se déclencher. Non seulement cela, mais Firebug ne me donne aucune preuve descriptive de ce qui se passe. Il me dit qu'il a fait le nouvel objet de poste sur la soumission, mais rien de plus.

Des idées?

Répondre

9

J'ai trouvé la réponse! Le problème était que lorsque le contrôleur affichait la vue, il incluait la disposition générale de ma demande; la mise en page cédait à l'action de rendu, donc mon code javascript contenu dans mon fichier .js.erb a été craché dans mon application.rhtml. Je résolu ce problème en incluant ce à l'intérieur de mon action de contrôleur pour afficher mes messages:

respond_to do |format| 
    format.js {render :layout=>false} 
end 
+0

Je reçois le même problème (http://stackoverflow.com/q/2738361/328998), et je considère l'astuce 'render: layout => false' comme une solution temporaire ... Il ne devrait pas afficher le fichier .js intégré dans la mise en page, cela n'a aucun sens ... – Yannis

+0

Cela n'a pas non plus de sens pour moi. J'ai essayé l'approche que vous avez listée (avec des rails indiquant le type MIME) mais cela n'a pas fonctionné pour moi; il voulait toujours cracher mon contenu js.erb dans la disposition du contrôleur spécifié. –

+0

Lire cette réponse était l'aboutissement d'heures de frustration. Ce n'était pas la réponse à ma question, mais cela m'a permis de regarder au bon endroit au bon moment. Merci beaucoup. – Ziggy

0

Watch a Railscast

<%= form_tag products_path, :method => 'get', :id => ↵ 
    "products_search" do %> 
    <%= hidden_field_tag :direction, params[:direction] %> 
    <%= hidden_field_tag :sort, params[:sort] %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

et à Js

// Search form. 
    $('#products_search').submit(function() { 
    $.get(this.action, $(this).serialize(), null, 'script'); 
    return false; 
    }); 
}); 
0

Lorsque ma mise en page a été codé en Haml (application.haml), AJAX ne se déclencherait pas et le code de contournement kelly.dunn mentionné ne fonctionnait pas. La solution la plus simple consistait à convertir la mise en page de l'application au format .html.erb.

Questions connexes