3

我有这个红宝石代码:

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 => trueand来做到这一点:method= :put

4

2 回答 2

4

使用remote: true,Rails 使用 format 对您的控制器操作进行 ajax 调用js。因此,当您准备好呈现输出时,在控制器的操作中,您只需要指定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 代码。

于 2013-08-19T15:25:55.303 回答
0

你也可以像这样在你的 javascript 中使用 'ajax:success' 钩子:

jQuery

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

咖啡

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

并删除onclick链接的属性。

于 2018-12-13T11:43:10.800 回答