Rails / Turbolinks - 导航到不同页面后颜色框不关闭

Rails / Turbolinks - Colorbox Not Closing After Navigating to Different Pages

我们正在使用 colorbox-rails gem 向我们的用户显示我们的 Rails 4 应用程序的注册页面。在弹出窗口的底部,我们有一个 link 表示 Already a member? Login。登录文本将用户重定向到我们的登录页面。

但是,由于 Rails 4 使用 turbolinks,登录页面的 html 正在后台加载 AJAX。这具有在颜色框后面加载登录页面的效果,而颜色框仍保持打开状态。

这里是触发颜色框的html:

<%= link_to 'Sign Up', '/blank/sign_in_helper', class: 'nav-link-box',
                                          :id => 'sign-up-link', :data => {
                                          :colorbox => true}
                                           %>

以及彩盒的HTML(sign_in_helper):

<h2>Sign Up</h2>

<%= form_for(:user, url: registration_path(:user)) do |f| %>

  <div class="field">
    <%= f.label :name, 'Display Name' %><br />
    <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "off" %>
  </div>

  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>

  <p>Already a member? <%= link_to 'Login.', new_user_session_path, class: 'lightbox-close' %> </p>
<% end %>

我尝试将颜色框关闭事件绑定到 link(coffeescript),但出于某种原因,它仅在 第二次单击 link 时有效:

$('.lightbox-close').click ->
    $.colorbox.close()

有没有办法在仍然使用 turbo-links 的同时做到这一点?或者是为特定 link 禁用 turbo-links 的最佳方法?

谢谢!

如果您想为某个 link 禁用 turbolinks,请向其添加 data-no-turbolinks 属性

<%= link_to 'Login.', new_user_session_path, class: 'lightbox-close', data: {no_turbolinks: true} %>

当使用带有 javascript 绑定的 turbo links 时,最好执行您在 document.readypage:load 上使用的代码,例如(假设您在你的 application.js:

中使用 jquery)
var ready;
ready = function(event) {

  //code when the page is loaded
};

$(document).on('ready page:load', ready);