【问题标题】:Rails javascript include not working properlyRails javascript包括无法正常工作
【发布时间】:2017-05-16 11:06:50
【问题描述】:

我正在一个应用程序上安装一个新的引导管理主题。

如果我像这样在应用程序主体 div 的末尾包含我的 javascript 文件,它会完美运行

<%= javascript_include_tag 'app.min.e05f769f' %>
<%= javascript_include_tag 'plugins-init' %>
<%= javascript_include_tag 'switchery-settings' %>

<%= javascript_include_tag 'js/jquery.dataTables.min' %>
<%= javascript_include_tag 'js/dataTables.bootstrap.min' %>

<%= content_for?(:extra_scripts) ? yield(:extra_scripts) : nil %>

但如果我像这样通过 application.js 包含它们,我会得到不同的结果。

<%= javascript_include_tag 'application', 'data-turbolinks-track': true %>
<%= content_for?(:extra_scripts) ? yield(:extra_scripts) : nil %>

应用程序.js

//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks

//= require bootstrap-sprockets

//= require js/lib.min

//= require app.min.e05f769f
//= require plugins-init
//= require switchery-settings

//= require js/jquery.dataTables.min
//= require js/dataTables.bootstrap.min

//= require_tree ./app

//= require cocoon

//= require_tree .
//= require_self

这里我的导航栏链接和所有与 javascript 相关的功能都被禁用了我的控制台中出现了这种错误

Uncaught TypeError: Cannot read property 'defaults' of undefined
    at application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:33719
    at application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:33719
    at application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:33719
highcharts-settings-26359110f393fbb0aa6bc3ffc41875fe5db4fc6e893003c0d7288e770583925c.js:3 Uncaught ReferenceError: Dashboard is not defined
    at HTMLDocument.<anonymous> (highcharts-settings-26359110f393fbb0aa6bc3ffc41875fe5db4fc6e893003c0d7288e770583925c.js:3)
    at u (lib.min-500a1a89656394ee5528d8f981d621eff7f09d649a35d99223d0f6eb23e011f5.js:2)
    at Object.fireWith [as resolveWith] (lib.min-500a1a89656394ee5528d8f981d621eff7f09d649a35d99223d0f6eb23e011f5.js:2)
    at Function.ready (lib.min-500a1a89656394ee5528d8f981d621eff7f09d649a35d99223d0f6eb23e011f5.js:2)
    at HTMLDocument.s (lib.min-500a1a89656394ee5528d8f981d621eff7f09d649a35d99223d0f6eb23e011f5.js:1)
clients:3096 Uncaught TypeError: $(...).DataTable is not a function
    at clients:3096
    at HTMLDocument.<anonymous> (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:31315)
    at HTMLDocument.dispatch (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:5227)
    at HTMLDocument.elemData.handle (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:4879)
    at Object.trigger (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:5131)
    at HTMLDocument.<anonymous> (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:5861)
    at Function.each (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:371)
    at jQuery.fn.init.each (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:138)
    at jQuery.fn.init.trigger (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:5860)
    at HTMLDocument.onLoad (application-7bd22507ed6202d2c9cdc970588f95759f6c5c6eaa7703cae22cbf0a7af22c5a.js:31320)

这两种方法有什么区别?包含这些文件的正确方法是什么?

【问题讨论】:

  • 你的资产文件夹结构是什么?
  • 我更新了我的资产文件夹层次结构的屏幕截图
  • 我相信宁愿添加/= require js/jquery.dataTables.min,它应该是/= require vendor/js/jquery.dataTables.min 也将供应商文件夹放在Javascript文件夹中。可以试试吗?
  • 供应商不仅有javascript,还有css和字体。要我用只有 js 文件的 javascripts/vendor 文件夹进行测试吗?
  • 是的。你能试试吗?似乎没有找到高图表和数据表javascript。

标签: javascript jquery ruby-on-rails twitter-bootstrap


【解决方案1】:

我的猜测是您没有在 JS 文件中捕获 turbolinks 事件。就像您需要为 jQuery 使用 $(document).ready() 一样,所有 JS 代码都应该只在 turbolinks:load 事件触发后执行。例如:

$(document).on "turbolinks:load", ->
  MyApp.init()

【讨论】:

  • 不确定它是如何工作的。你能告诉我更多细节吗? (我在问题中更新了 application.js,就像我现在使用的一样)
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多