Rails与data-remote =“true”和data-method =“PUT”链接后的回调

时间:2013-08-19 15:17:37

标签: ruby-on-rails ajax callback link-to link-to-remote

我有这个红宝石代码:

link_to t("general.actions.#{ action }"), [action, @app, item], { 
   :method => :put, 
   :remote => true, 
   :onclick => '$(this).closest("tr").find("td").fadeOut()' 
}, :class => 'status' 

生成此html:

<a href="/apps/guess-the-model/contents/52118140d644363dc4000005/approve" 
   data-method="put" 
   data-remote="true" 
   onclick="$(this).closest("tr").find("td").fadeOut()" 
   rel="nofollow">
    approve
</a>

问题是,我不应该使用onclick。我应该只在AJAX成功的时候调用这个js代码,所以我应该以某种方式传递一个回调并检查XMLHttpRequest状态。如何使用:remote => true:method= :put

执行此操作

2 个答案:

答案 0 :(得分:4)

使用remote: true,Rails以格式js对您的控制器操作进行ajax调用。因此,当您准备好渲染输出时,在控制器的操作中,您只需指定format.js选项,如下所示:

def action
  ...

  respond_to do |format|
    format.html {...} # You probably have something like this already
    format.js {} # Add this line
end

然后,您需要在action.js.erb目录中添加app/views/app/文件,并执行您希望在onclick执行的javascript代码。

答案 1 :(得分:0)

您也可以像这样在JavaScript中use the 'ajax:success' hook

jQuery

$('a.status').on('ajax:success', function(ev) {
    $(this).closest("tr").find("td").fadeOut()
})

咖啡

$ ->
    $("a.status").on "ajax:success", (event) ->
    //your code

并删除链接的onclick属性。