我在一个更简单的Rails应用程序中包含了Highcharts,它运行得很好。但是当我在一个更复杂的Rails应用程序中做同样的事情时,图表的Javascript代码没有显示出来。
这是我到目前为止所做的事情:
的Gemfile
gem "highcharts-rails", "~> 3.0.0"
的application.js
//= require highcharts
//= require highcharts/highcharts-more
show.html.erb
<div class="panel panel-default">
<div class="panel-heading">Chart</div>
<div id="container" style="width:100%; height:400px;">
</div>
<script type="text/javascript" charset="utf-8">
$(function () {
$(document).ready(function() {
Highcharts.setOptions({
global: {
useUTC: false
}
});
var chart;
$('#container').highcharts({
chart: {
type: 'spline',
animation: Highcharts.svg, // don't animate in old IE
marginRight: 10,
events: {
load: function() {
// set up the updating of the chart each second
var series = this.series[0];
setInterval(function() {
var x = (new Date()).getTime(), // current time
y = Math.random();
series.addPoint([x, y], true, true);
}, 1000);
}
}
},
title: {
text: 'Live random data'
},
xAxis: {
type: 'datetime',
tickPixelInterval: 150
},
yAxis: {
title: {
text: 'Value'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>'+
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) +'<br/>'+
Highcharts.numberFormat(this.y, 2);
}
},
legend: {
enabled: false
},
exporting: {
enabled: false
},
series: [{
name: 'Random data',
data: (function() {
// generate an array of random data
var data = [],
time = (new Date()).getTime(),
i;
for (i = -19; i <= 0; i++) {
data.push({
x: time + i * 1000,
y: Math.random()
});
}
return data;
})()
}]
});
});
});
</script>
</div>
有人知道我做错了什么吗?谷歌告诉它可能与turbolinks有关,但它也无法在其他应用程序上运行......
快速的第二个问题。我怎么能把这个代码添加到channel.js.coffee,所以这个页面上没有js? 提前谢谢!
答案 0 :(得分:1)
抓住最新的Highcharts来源,解决了这个问题:code.highcharts.com
答案 1 :(得分:1)
当我开始使用highcharts时,我遇到了与此非常相似的东西。我知道这个问题有点旧,但我想写这个以供参考,以防其他人遇到这个问题。
这是我为了让我的图表工作而做的(作为参考,我运行Rails 4.0.2和ruby 2.1.1。以及带有最新highcharts-rails gem的最新highcharts):
首先,请确保将所有highcharts.js文件加载到您的assets / javascript目录中。
在application.js文件中,您应按以下顺序进行以下操作:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require highcharts
//= require_tree .
其次,要从show.html.erb文件中获取代码,我不了解coffeescript,但您可以在名为chart.js的/ assets / javascript中创建一个js文件。将您的javascript放入此文件,从
开始$(function () {
确保chart.js中的(&#39;#container&#39;)与html.erb文件中div的id匹配。像这样:
/assets/javascript/chart.js
$('#container').highcharts({
show.html.erb:
<div id="container" style="width:100%; height:400px;"></div>
我不需要移除或关闭turbolink以使其中的任何一个工作。但是,当我设置导航栏链接时,我希望我的页面在重新打开时刷新(以确保显示最新信息,而不是缓存信息)所以在我的导航栏中,我确实通过添加数据删除了turbolinks功能 - 无涡轮链接到包含我的链接的navbar div。如下:
<div class="nav" data-no-turbolink>
... navbar code here
</div>
这里是关于turbolinks的github回购的链接 - 阅读文档,因为它提供了有关turbolinks做什么,为什么它有用以及(当你不想使用它时)的好信息)如何关闭它。 https://github.com/rails/turbolinks/blob/master/README.md
最后一件事 - 当我最终获得我的图表渲染(tada!)时,他们应用了highcharts主题。我只是从/ assets / javascript中删除了高图主题文件夹,它们看起来很棒。