【问题标题】:rails link_to :remote导轨链接到:远程
【发布时间】:2013-03-08 10:51:47
【问题描述】:

我有以下几点:

<%= 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 %>

它会弹出一个 Bootstrap Modal 进行确认,我想挂接到 ajax 调用上,这样我就可以显示一个微调器或某种文本。

我知道我可以使用不显眼的 javascript 来监听 click 事件,如果我不在我的 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

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

有什么建议吗?

感谢您的帮助

【问题讨论】:

  • 这可能就是你要找的东西:github.com/rails/jquery-ujs/wiki/ajax

标签: javascript ruby-on-rails ajax link-to


【解决方案1】:

您可以像这样绑定到 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();
});

【讨论】:

  • 我正在尝试做同样的事情..但不知何故 ajax:complete 不会被解雇。只有beforeSend 正在工作。我在我的情况下使用 GET。
  • @RahulDess 您的服务器是否正在生成响应?我可以想象不触发完整回调的唯一原因是请求永远不会完成。
  • 请求成功完成..但值得注意的是我通过控制器中的 javascrpipt 呈现部分内容。那有什么改变吗?
  • @RahulDess 如果控制器返回替换链接(或包含它的东西)的 JavaScript,那么如果不触发 ajax:complete 是有意义的,因为原始链接不再存在于 DOM 中要传播的事件。 (这在微调器的情况下可能不是问题,因为微调器也可能被吹走。)
【解决方案2】:

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

在您的控制器中:

控制器

 def my_method
     #code here
     respond_to do |format|
      format.js  {}
     end
    end

my_method.html.erb

<div id = "link-delete"></div>

my_method.js.erb

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

_text_message.html.erb

<p>Loading...</p>

【讨论】:

  • $("#link-delete").html("&lt;%= escape_javascript(render(:partial =&gt; "text_message"))%&gt;"); 可以简写为$("#link-delete").html("&lt;%=j render "text_message")%&gt;");
  • 哇,我从来不知道。这真好。但是它怎么知道你是在渲染部分文本还是只是一个简单的文本呢?您尚未在渲染中定义 partial。
  • 当然,我知道,但那是在执行 ajax 请求之后。我想在调用 ajax 调用之前显示“正在加载...”消息。
  • 但是您在链接中使用了:remote =&gt; true,它会在点击时调用 ajax。
  • 基本上应该在调用我的控制器中的操作之前显示“正在加载...”消息。问题是,使用 Bootstrap 模式,我似乎失去了对调用过程的控制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多