在Rails响应中返回JS并使其在没有.js.erb文件的情况下执行

时间:2013-03-15 20:49:55

标签: jquery ruby-on-rails-3.2

我目前正在我的控制器中使用它

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响应非常糟糕。

1 个答案:

答案 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();

将这些隐藏在控制器响应中可能对于避免创建(又一个)文件很方便,但应用程序的可维护性会受到影响。