rails link_to:remote

cgi*_*omi 37 javascript ajax ruby-on-rails link-to

我有以下内容:

<%= link_to my_path, method: :delete, confirm: 'Delete?', class: 'link-delete', 'data-message' => 'Are you sure?', 'data-severity' => 'danger', :remote => true do %>
  <i class="icon-trash"></i>
<% end %>
Run Code Online (Sandbox Code Playgroud)

它会启动一个Bootstrap Modal进行确认,我想挂钩ajax调用,以便我可以显示一个微调器或某种文本.

我知道我可以使用不引人注目的javascript来监听点击事件,如果我不在我的link_to中使用':remote => true'

jQuery ->
  $('.link-delete').live 'click', (event) ->
    $('.link-delete').html("Loading...")  #THE MSG OR ANIMATION I WANT TO DISPLAY
    $.get(this.href, null, null, 'script')
   false
Run Code Online (Sandbox Code Playgroud)

但是在使用':remote => true'时不确定如何将两者结合起来

有什么建议?

谢谢您的帮助

Arj*_*jan 71

你可以像这样绑定到ajax调用:

<%= link_to my_path, method: :delete, confirm: 'Delete?', class: 'link-delete', 'data-message' => 'Are you sure?', 'data-severity' => 'danger', :remote => true do %>
  <i class="icon-trash"></i>
<% end %>

$('.link-delete').bind('ajax:beforeSend', function() {
  $('#mySpinner').show();
});

$('.link-delete').bind('ajax:complete', function() {
  $('#mySpinner').hide();
});
Run Code Online (Sandbox Code Playgroud)

  • @RahulDess 如果控制器返回替换链接(或包含它的东西)的 JavaScript,那么如果不触发`ajax:complete` 是有意义的,因为原始链接不再存在于 DOM 中以便传播事件。(这在微调器情况下可能不是问题,因为微调器也可能被吹走。) (2认同)

My *_*God 11

你不需要将两者结合起来.只需使用format.js来调用javascript.

在你的控制器中:

调节器

 def my_method
     #code here
     respond_to do |format|
      format.js  {}
     end
    end
Run Code Online (Sandbox Code Playgroud)

my_method.html.erb

<div id = "link-delete"></div>
Run Code Online (Sandbox Code Playgroud)

my_method.js.erb

$("#link-delete").html("<%= escape_javascript(render(:partial => "text_message"))%>");
Run Code Online (Sandbox Code Playgroud)

_text_message.html.erb

<p>Loading...</p>
Run Code Online (Sandbox Code Playgroud)

  • `$("#link-delete").html("<%= escape_javascript(render(:partial =>"text_message"))%>");`可缩短为`$("#link-delete") .html("<%= j render"text_message")%>");` (8认同)