0

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

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 响应是非常恶心的。

4

1 回答 1

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

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

于 2013-05-07T22:42:57.150 回答