我有一個響應HTML和JS(AJAX)查詢一個FooController的:如何在JS Rails響應中包含HTML?
# 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模板只具有普通的老JS在它(如alert('hi');
),它使用了我的JS模板。但是,當我放入render(:partial)時,它會使整個響應使用HTML模板,這意味着它不再有效的JS。
一個可能的解決方案是使用一個功能佈局:
class FooController < ApplicationController
layout :choose_layout
...
private
def choose_layout
return nil if request.xhr?
'foo'
end
end
但我的版本應該工作!爲什麼不呢?
我認爲它沒有工作的原因是一個小錯誤:我有一個.json.erb模板,但沒有.js.erb一個,沒有默認的.erb之一。 – 2008-12-08 16:38:10