rails3禁用特定ajax调用的微调器

时间:2013-05-22 14:10:36

标签: jquery ajax ruby-on-rails-3 spinner

我的项目有很多ajax链接,我可能会为每个ajax请求实现微调器。 我在application.js中全局使用了ajaxStart和ajaxStop回调来处理所有ajax请求。

我的application.js

$(document).ready(function() {

   $(this).ajaxStart(function(){
     $("#ajax_loader").modal('show');
   })
   .ajaxStop(function(){
     $("#ajax_loader").modal("hide");
   });

});

但有些网页上有很多快速的小型ajax调用,而某些具有 data-spinner = false 属性的ajax链接则不需要微调器。

我走遍网络,发现了一些不符合我要求的解决方案(解绑)。例如

index.html.erb

<script type="text/javascript" charset="utf-8">
   $(document).ready(function() {
     $(this).unbind("ajaxStart ajaxStop")
   });
</script>

<%= link_to "show", xxx, :remote => true, "data-spinner" => true %>

<%= link_to "update", xxx, :remote => true, "data-spinner" => false %>

<%= link_to "remove", xxx, :remote => true, "data-spinner" => false %>

取消绑定将禁用页面中所有可用的ajax调用的微调器。

了解任何想法或解决方案?

先谢谢。

1 个答案:

答案 0 :(得分:2)

您可以在jquery-ujs中将ajax:before绑定到所需的元素。 See this article

你可以像这样使用data-spinner来定位元素

$('a[data-remote=true][data-spinner=true]').on('ajax:before', function(){
  $("#ajax_loader").modal('show');
})

$('a[data-remote=true][data-spinner=true]').on('ajax:complete', function(){
  $("#ajax_loader").modal("hide");
})

希望这有帮助。

<强>更新

如果所有remote => 'true'个链接都具有data-spinner属性,则可以对其进行检查。

$('a[data-remote=true]').on('ajax:before', function(){

   var nospinner = false;

   if($(this).attr('data-spinner') != undefined && $(this).attr('data-spinner') == "false"){
      nospinner = true;
    }

    if(nospinner==false) {
      $("#ajax_loader").modal('show');
    }

})