Rails 5.1.4:/ vendor中的第三方资产不会显示在

时间:2017-11-21 20:06:44

标签: javascript ruby-on-rails asset-pipeline amcharts

我正在尝试运行一个简单的rails(-v 5.1.4)应用程序,该应用程序实现了amcharts库附带的一个示例。

这是做了什么工作:

  • 创建/app/assets/javascripts/amcharts文件夹
  • 将第三方内容复制到/app/assets/javascripts/amcharts
  • //= require amcharts添加到/app/assets/javascripts/application.js

我运行rails服务器,并且通过观看原始的独立html视图按预期显示图形。因此,我假设编辑的代码工作正常。

这里没有工作:

  • 创建/vendor/assets(/javascripts)/amcharts文件夹
  • 将第三方内容复制到/vendor/assets(/javascripts)/amcharts
  • //= require amcharts添加到/app/assets/javascripts/application.js
  • config.assets.paths << Rails.root.join('vendor/assets(/javascripts)/amcharts')添加到config/application.rb
  • 将相对路径../../../vendor/assets(/javascripts)/amcharts/$name$.js添加到app/assets/application.js

当我运行rails服务器时没有给出错误但应用程序显示空白页而不是图表,页面的源代码按预期显示我的视图文件的代码。

由于我的相应视图被称为amcharts.html.erb,因此我的amcharts.coffee - 文件夹中有app/assets/javascripts/个文件。可能是链轮错误地认为它是需要的文件吗?

我也想知道app/config/manifest.js的用途。所有明显相关的更改似乎都在app/assets/javascript/application.js文件中进行...

编辑:我的视图文件app/views/amcharts/index.html.erb的缩短版本(来自amcharts lib的示例的修改代码)

<div id="chartdiv" style="width: 100%; height: 400px;"></div>
<script type="text/javascript">
var chart;
var chartData = [ { $data } ];
AmCharts.ready(function () { 
  chart = new AmCharts.AmSerialChart();
  chart.dataProvider = chartData;
  $AmCharts.funs
  chart.write("chartdiv");
});
</script>

2 个答案:

答案 0 :(得分:1)

我有机会与专业人士分享我的档案,他解决了这个问题。要走的路是:

  • 安装gems'amcharts-rails','rails-assets-amcharts3'
  • //= require amcharts3//= require amcharts3/serial添加到a​​pp / assets / javascripts / application.js

我仍然想知道如何从供应商/资产中包含第三方内容。但由于现在整个工作都没有在错误的文件夹中存档,我会将其标记为已回答。感谢所有试图帮助的人!

答案 1 :(得分:-1)

将JS包直接放在vendor/assets下,而不是vendor/assets/javascripts。例如,通过/vendor/assets/amcharts/amcharts.js//= require amcharts库添加到您的应用程序。

有关更具体的示例,请参阅Rails 5应用程序中包含DataTables库的结构:&lt; p>

vendor/assets/DataTables-1.10.16/js/dataTables.bootstrap4.js
vendor/assets/DataTables-1.10.16/js/jquery.dataTables.js
vendor/assets/DataTables-1.10.16/css/dataTables.bootstrap4.css

(请注意vendor/assets下方的文件夹层次结构正是DataTables包提供的内容。)

application.css:

/*
 *= css/dataTables.bootstrap4
 */

的application.js:

//= require js/jquery.dataTables
//= require js/dataTables.bootstrap4