J'ai un FooController qui répond à HTML et les requêtes JS (AJAX):Comment inclure du HTML dans une réponse JS Rails?
# app/controllers/foo_controller.rb:
class FooController < ApplicationController
layout 'foo'
def bar
respond_to do |format|
format.html # foo/bar.html.erb
format.js # foo/bar.js.erb
end
end
end
Les modèles pour le soutenir:
# app/views/layouts/foo.html.erb:
<html>...<%= yield %>...</html>
# app/views/layouts/foo.json.erb:
<%= yield %>
Et un modèle AJAX dans lequel je veux rendre une partie:
# app/views/foo/bar.js.erb:
dojo.byID('some_div').innerHTML = "<%= escape_javascript(render(:partial => 'some/partial')) %>";
Si le modèle JS a tout simplement vieux JS dedans (comme alert('hi');
), il utilise mon modèle de JS. Quand je mets le rendu (: partial), cependant, il fait que toute la réponse utilise le template HTML, ce qui signifie que JS n'est plus valide.
Une solution possible est d'utiliser une fonction pour la mise en page:
class FooController < ApplicationController
layout :choose_layout
...
private
def choose_layout
return nil if request.xhr?
'foo'
end
end
Mais ma version devrait travail! Pourquoi pas?
Je pense que la raison pour laquelle cela n'a pas fonctionné était un petit bug: j'avais un template .json.erb, mais pas de .js.erb un et pas de défaut .erb un. –