Ruby on rails 访问根目录链接时如何隐藏AJAX加载图像
我的应用程序中有一些AJAX加载,我想有一个加载图标会很好,因为有一点延迟。我从我的电脑上抓到了一些代码。加载和隐藏工作正常,只是我在标题中有一个徽标,它是指向根的链接:Ruby on rails 访问根目录链接时如何隐藏AJAX加载图像,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我的应用程序中有一些AJAX加载,我想有一个加载图标会很好,因为有一点延迟。我从我的电脑上抓到了一些代码。加载和隐藏工作正常,只是我在标题中有一个徽标,它是指向根的链接: <%= link_to "#{app_name}", root_url, id: "logo" %> })) 我甚至尝试在徽标上添加一个onclick。首先触发,然后加载页面,并显示微调器。有什么问题吗?特里,这是对你有帮助的评论的补充 有几件事需要解决: 您应该隐藏CSS,使用JQuery使其可见 您当前正在
<%= link_to "#{app_name}", root_url, id: "logo" %>
}))
我甚至尝试在徽标上添加一个onclick。首先触发,然后加载页面,并显示微调器。有什么问题吗?特里,这是对你有帮助的评论的补充 有几件事需要解决:
微调器
虽然这会起作用,但会给应用程序增加不必要的开销。相反,当Ajax运行时,最好显示微调器
:
#app/assets/stylesheets/application.css
.spinner {
display: none; /* Use this instead of inline styles */
}
您应该将微调器绑定到页面上的元素
您当前正在将微调器
绑定到ajaxStart
和ajaxStop
。这些是全局函数,每次Ajax运行时都会触发
这可能适用于简单的应用程序,但在更复杂的系统中是不好的做法
我会这样做:
#app/assets/javascripts/application.js
spinner = function(){
$(".spinner").toggle();
}
$(document).on("ajax:beforeSend", function(){
spinner();
}).on("ajax:complete", function(){
spinner();
});
$(document).on("click", ".element", function(){
spinner();
$.ajax({
...
});
这将使用Rails UJS中的事件处理程序(每次调用remote:true
,这将触发)
它还允许您对应用程序中的任何其他事件/元素使用微调器功能。Terry,这是对您有所帮助的注释的附带说明
有几件事需要解决:
您应该隐藏CSS,使用JQuery使其可见
您当前正在使用JQuery在DOM加载上隐藏微调器
虽然这会起作用,但会给应用程序增加不必要的开销。相反,当Ajax运行时,最好显示微调器
:
#app/assets/stylesheets/application.css
.spinner {
display: none; /* Use this instead of inline styles */
}
您应该将微调器绑定到页面上的元素
您当前正在将微调器
绑定到ajaxStart
和ajaxStop
。这些是全局函数,每次Ajax运行时都会触发
这可能适用于简单的应用程序,但在更复杂的系统中是不好的做法
我会这样做:
#app/assets/javascripts/application.js
spinner = function(){
$(".spinner").toggle();
}
$(document).on("ajax:beforeSend", function(){
spinner();
}).on("ajax:complete", function(){
spinner();
});
$(document).on("click", ".element", function(){
spinner();
$.ajax({
...
});
这将使用Rails UJS中的事件处理程序(每次调用remote:true
,这将触发)
它还允许您对应用程序中的任何其他事件/元素使用微调器
功能。如何使用:
并删除://隐藏微调器$(“.spinner”).hide()
不要用javascript初始化它来隐藏元素,而要用css来隐藏它。你能告诉我现在发生了什么吗?你使用涡轮链接吗?谢谢!这就是诀窍。我只是不熟悉jQuery。首先,我必须修改微调器CSS以设置display:none,而不是display:inline块。正如您所建议的,我注释掉了隐藏函数。为了显示它,我没有使用show,而是使用了$(“.spinner”).css(“display”,“inline block”);很好的发现,我已经把这个书签了,谢谢!如何使用:
并删除://隐藏微调器$(“.spinner”).hide()
不要用javascript初始化它来隐藏元素,而要用css来隐藏它。你能告诉我现在发生了什么吗?你使用涡轮链接吗?谢谢!这就是诀窍。我只是不熟悉jQuery。首先,我必须修改微调器CSS以设置display:none,而不是display:inline块。正如您所建议的,我注释掉了隐藏函数。为了显示它,我没有使用show,而是使用了$(“.spinner”).css(“display”,“inline block”);很好的发现,我已经把这个书签了,谢谢!