加载每个视图后,Rails会发出警报

时间:2015-08-23 02:21:52

标签: jquery ruby-on-rails ruby-on-rails-4

我了解Asset Pipeline及其目的。但是,每个页面准备好后,文件mailers.js中的警报将触发。

$( document ).ready(function() {
  $("#search_mailer").focus();
  console.log( "page is loaded!" );
});

几个问题:

  1. 我是否应该隔离document(ready)代码,以便在加载所有网页时不会触发它?

  2. 如果我有一个带有document.ready代码的视图,那么它会不止一次运行吗?

  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

$(document).ready();应该是文件中的“root”函数(即没有围绕它的代码)。每次加载页面时,任何包含文件中的每个$(document).ready()都会触发。我将代码与控制器和/或操作隔离的方法是在body标记中添加几个类:

<body class="<%=params[:controller].gsub('/', '-')%> <%=params[:action]%>">

因此,您知道该页面属于哪个控制器和操作。使用JavaScript,您可以执行以下操作:

$(document).ready(function()
{
  if($('body.user').length > 0) #Example controller name
  {
    #Put controller specific code here
    if($('body.new, body.edit').length > 0) #Example action names
    {
      #Put action specific code here
    }
  }
});