我的项目有很多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调用的微调器。
了解任何想法或解决方案?
先谢谢。
答案 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');
}
})