【问题标题】:How to load javascript dependencies with turbolinks如何使用 turbolinks 加载 javascript 依赖项
【发布时间】:2014-11-30 14:58:12
【问题描述】:

在 Rails 应用程序中,我使用的是 turbolinks 和 jquery-turbolinks。我有一些大的 javascript 依赖项,比如 dataTables。首先,我在 application.js 上加载所有这些依赖项,但最后,我在预编译后的 1Mo 上有大文件,所以我只想在需要时加载依赖项。

我创建了一个名为 custom-datables.coffe 的文件,其中包含以下内容:

#= require dataTables/jquery.dataTables
#= require datatables

$(document).ready ->
  console.log $('.data-table').dataTable

我是这样包含的:

- content_for :javascript do
  = javascript_include_tag 'custom-datatables'

我在应用程序布局结束时生成了 javascript。

当我刷新页面时它可以工作,但是当我使用 turbolinks 转到此页面时,我可以看到 $('.data-table').dataTable 未定义。当我在 firefox 的控制台中输入$('.data-table').dataTable 时,函数就被定义了。 $(document).ready 似乎在数据表完全加载之前触发。

有办法解决吗?加载大依赖项是最佳做法吗?

【问题讨论】:

    标签: javascript jquery ruby-on-rails datatable turbolinks


    【解决方案1】:

    当使用turbolinks 时,您应该使用page:change 事件,而不是文档就绪。

    所以在你的情况下:

    $(window).bind 'page:change', () ->
      console.log $('.data-table').dataTable
    

    我通常更喜欢一个大的 application.js 文件,因为第一次加载后它会缓存在您的客户端浏览器中。同样在生产中,它会被缩小和压缩。

    【讨论】:

    • 永远不会触发该操作。单个大文件的问题比加载时间长。我的页面需要 20 秒才能加载,我正在寻找一种提高速度的方法。
    • 从未触发?这很奇怪。你有一个javascript错误吗?您使用的是哪个版本的 turbolink(尽管我很确定该事件总是以这种方式调用)。您确定您的浏览器有新的 javascript 代码吗?
    猜你喜欢
    • 2010-09-15
    • 2021-06-11
    • 1970-01-01
    • 2016-10-21
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多