Tôi có một FooController rằng phản ứng với HTML và (AJAX) truy vấn JS:Làm cách nào để đưa HTML vào phản hồi 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
Các mẫu để hỗ trợ nó:
# app/views/layouts/foo.html.erb:
<html>...<%= yield %>...</html>
# app/views/layouts/foo.json.erb:
<%= yield %>
Và một mẫu AJAX trong đó tôi muốn vẽ lại một phần:
# app/views/foo/bar.js.erb:
dojo.byID('some_div').innerHTML = "<%= escape_javascript(render(:partial => 'some/partial')) %>";
Nếu mẫu JS chỉ có JS cũ trong nó (như alert('hi');
), nó sử dụng mẫu JS của tôi. Khi tôi đưa vào render (: partial), mặc dù, nó làm cho toàn bộ phản hồi sử dụng mẫu HTML, điều đó có nghĩa là nó không còn hợp lệ JS nữa.
Một giải pháp khả thi là sử dụng một chức năng cho cách bố trí:
class FooController < ApplicationController
layout :choose_layout
...
private
def choose_layout
return nil if request.xhr?
'foo'
end
end
Nhưng phiên bản của tôi nên công việc! Tại sao không?
Tôi nghĩ lý do nó không hoạt động là một lỗi nhỏ: Tôi có mẫu .json.erb, nhưng không có .js.erb và không có .erb. –