Mam FooController który reaguje na HTML i JS (Ajax) Zapytania:Jak dołączyć kod HTML do odpowiedzi 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
Szablony go wspierać:
# app/views/layouts/foo.html.erb:
<html>...<%= yield %>...</html>
# app/views/layouts/foo.json.erb:
<%= yield %>
i szablon AJAX, w którym chcę, aby uczynić częściowy:
# app/views/foo/bar.js.erb:
dojo.byID('some_div').innerHTML = "<%= escape_javascript(render(:partial => 'some/partial')) %>";
Jeśli szablon JS ma tylko zwykły stary JS w nim (jak alert('hi');
), używa mój szablon JS. Kiedy wstawiam render (: częściowy), powoduje to, że cała odpowiedź używa szablonu HTML, co oznacza, że nie jest już prawidłowym JS.
Możliwym rozwiązaniem jest użycie funkcji dla układu:
class FooController < ApplicationController
layout :choose_layout
...
private
def choose_layout
return nil if request.xhr?
'foo'
end
end
Ale moja wersja powinien pracy! Dlaczego nie?
Myślę, że powodem, dla którego to nie zadziałało, był drobny błąd: Miałem szablon .json.erb, ale nie było żadnego .jbera ani domyślnego .erb. –