带有Rails 4.1.4的Lightbox或Fancybox仅在刷新后有效

use*_*024 4 jquery ruby-on-rails fancybox

我试图在我的应用程序中使用lighbox或fancybox而没有宝石......

我已经尝试输入资产/ javascript和assets/stylesheet .js和.css文件.但它们只在我刷新页面时才有效.

在我的application.html.erb中

<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <script type="text/javascript">
        $(document).ready(function() {
            $(".fancybox").fancybox();
        });
    </script>
Run Code Online (Sandbox Code Playgroud)

输出:

<link data-turbolinks-track="true" href="/assets/bootstrap.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/home.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/jquery.fancybox.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/novidades.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/home.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.fancybox.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.fancybox.pack.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/novidades.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/application.js?body=1"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $(".fancybox").fancybox();
        });
    </script>
Run Code Online (Sandbox Code Playgroud)

什么是错的?

Ric*_*eck 6

Turbolniks

即使你提到你这样做"没有宝石",它也有一个问题的所有标志 turbolinks

如果您不知道,Turbolinks是与Rails捆绑在一起的宝石,可以帮助您更快地加载页面.它通过基本上拉取<body>页面的内容,保持<head>完整性来实现这一点.

尽管Turbolinks在大多数情况下都有效,但它有一个主要缺陷 - 因为当你加载页面时JS没有刷新(因为页面的head区域保持不变),JS通常不会"工作",除非你刷新页面(然后刷新<head>标签).

-

固定

有几种方法可以"修复"这个 - 基本上让你的JS使用Turbolinks刷新:

首先,您需要使用Turbolinks 事件:

#app/assets/javascripts/application.js
var fancybox = function(){
    $(".fancybox").fancybox();
};
$(document).on("page:load ready", fancybox);
Run Code Online (Sandbox Code Playgroud)

应该适合你.另一种解决方案是使用Javascript委派,尽管在这种情况下我认为它不适用于Fancybox

  • 感谢您的帮助,此代码对我不起作用,但您的解释帮助我理解真正的问题,所以我尝试了"$('.fancybox').fancybox({parent:"body"});" 在application.js和工作.谢谢. (5认同)