1

我在一个更简单的 Rails 应用程序中包含了 Highcharts,它工作得很好。但是当我在更复杂的 Rails 应用程序中做同样的事情时,图表没有显示 Javascript 代码。

这是我到目前为止所做的:

宝石文件

 gem "highcharts-rails", "~> 3.0.0"

应用程序.js

//= require highcharts
//= require highcharts/highcharts-more

显示.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?提前致谢!

4

2 回答 2

1

获取最新的 Highcharts 源,它解决了这个问题:code.highcharts.com

于 2013-11-22T01:14:47.733 回答
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,但你可以在 /assets/javascript 中创建一个名为 chart.js 的 js 文件。将您的 javascript 放入此文件,从

$(function () {  

确保 chart.js 中的 ('#container') 与 html.erb 文件中 div 的 id 匹配。像这样:

/assets/javascript/chart.js

$('#container').highcharts({

显示.html.erb:

<div id="container" style="width:100%; height:400px;"></div>

我不需要删除或关闭 turbolinks 来让这些工作。但是,当我设置导航栏链接时,我希望我的页面在重新打开时刷新(以确保显示最新信息,而不是缓存信息)所以在我的导航栏中,我确实通过添加 data-no-turbolinks 删除了 turbolinks 功能到包含我的链接的导航栏 div。如下:

<div class="nav" data-no-turbolink>
   ... navbar code here 
</div>

这是 turbolinks 的 github repo 的链接 - 阅读文档,因为它提供了有关 turbolinks 的作用、为什么有用以及(当您不想使用它时)如何关闭它的良好信息。 https://github.com/rails/turbolinks/blob/master/README.md

最后一件事——当我最终得到我的图表来渲染时(tada!),他们应用了 highcharts 主题。我只是从 /assets/javascript 中删除了 highchart 主题文件夹,它们看起来很棒。

于 2014-09-28T01:06:20.200 回答