Ruby on Rails DOM更新仅在页面重新加载后才起作用

时间:2017-04-09 01:32:18

标签: jquery css ruby-on-rails

我根据当前路线更新html元素的类名。单击元素时,我还有一些jquery来显示菜单。当我在主页上时,html类被正确添加到html元素中,并且单击时菜单会正确显示。但是,当我通过单击导航链接导航到另一个路线时,路线会正确更改,但html类名称不会更新,并且jquery不会再触发。

application_helper.rb

  def html_class(class_name)
    content_for(:html_class) { class_name }
  end 

application.html.erb

<html class="<%= yield(:html_class) || '' %>"> <!-- class is only updated on page reload -->

home.html.erb

<% html_class 'nail' %>

项目/ index.html.erb

<!-- no html_class provided, should default to '' -->
<div class="row projects">
  <% @projects.each do |project| %>
    <%= render project %>
  <% end %>
</div>

site.js

//当路线更改页面必须重新加载以触发

$(function() {
  $('#initials').click(function() {
    $('.slider, .nav-btn').toggleClass('closed');
  })
});

1 个答案:

答案 0 :(得分:2)

尝试使用以下方法包装jQuery。这个问题可能是由Turbolinks引起的,它会加载你用AJAX点击的页面来加速它。因此,这个包装器会告诉Javascript在turbolinks加载时触发,而不是在整页刷新时触发。

$(document).on('turbolinks:load', function() {
  $('#initials').click(function() {
    $('.slider, .nav-btn').toggleClass('closed');
  })
});