HTMLおよびJS(AJAX)クエリに応答するFooControllerがあります。
# 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
それをサポートするテンプレート:
# app/views/layouts/foo.html.erb:
<html>...<%= yield %>...</html>
# app/views/layouts/foo.json.erb:
<%= yield %>
そして、パーシャルをレンダリングしたいAJAXテンプレート:
# app/views/foo/bar.js.erb:
dojo.byID('some_div').innerHTML = "<%= escape_javascript(render(:partial => 'some/partial')) %>";
JSテンプレートに(のようにalert('hi');
)単純な古いJSが含まれている場合は、私のJSテンプレートを使用します。ただし、render(:partial)を挿入すると、応答全体でHTMLテンプレートが使用されるため、有効なJSではなくなります。
考えられる解決策は、レイアウトに関数を使用することです。
class FooController < ApplicationController
layout :choose_layout
...
private
def choose_layout
return nil if request.xhr?
'foo'
end
end
しかし、私のバージョンは動作するはずです!なんでそうじゃないの?