我目前正在我的控制器中使用它
respond_to do |format|
format.html { render :js => alert('example') }
end
这在我的application.js
中$(document).ajaxSuccess( function(event, xhr, settings) {
if ( settings.url == '/example' ) {
eval(xhr.responseText)
} else if ( settings.url.match(/[\/example\/\d]+$/)) {
eval(xhr.responseText)
loadComplete()
} else {
(etc)
}
})
在ajax响应中返回JS并让浏览器执行它。我这样做是为了避免编写新的.js.erb文件以适应每个可能的响应。
有更好的方法吗?我认为减少文件数量会很好,但是必须在ajaxSuccess settings.url上使用正则表达式分离JS响应非常糟糕。
答案 0 :(得分:0)
更好的方法是遵循约定并只生成js.erb文件。它们会以假定的操作自动执行。例如,在create.js.erb中创建节的响应:
$('#placeholder-<%= @subsection[:sortlabel] %>').replaceWith("<%= escape_javascript render :partial => 'section_item', :locals => {:section=>@subsection} %>")
destroy.js.erb的内容:
$('li#menu-item-<%= @section.id %>').remove();
将这些隐藏在控制器响应中可能对于避免创建(又一个)文件很方便,但应用程序的可维护性会受到影响。