C3JS - 无法读取未定义的属性“category10”

Posted

技术标签:

【中文标题】C3JS - 无法读取未定义的属性“category10”【英文标题】:C3JS - Cannot read property 'category10' of undefined 【发布时间】:2016-11-15 15:01:27 【问题描述】:

我从 jsfiddle (https://jsfiddle.net/varunoberoi/mcd6ucge) 尝试了这个 c3.js 代码,但它似乎在我的本地主机中不起作用。

我使用 uniserver 作为我的服务器。我复制粘贴所有内容,但它不起作用。

<html>
    <head>
        <!-- CSS -->
        <link href="css/c3.css" rel="stylesheet" type="text/css" />

        <!-- javascript -->
        <script src="js/d3.min.js" type="text/javascript"></script>
        <script src="js/c3.js" type="text/javascript"></script>

        <script type="text/javascript">
            window.onload=function()
                var chart = c3.generate(
                    data: 
                        columns: [
                            ['data1', 300, 350, 300, 0, 0, 0],
                            ['data2', 130, 100, 140, 200, 150, 50]
                        ],
                        types: 
                            data1: 'area',
                            data2: 'area-spline'
                        
                    ,
                    axis: 
                        y: 
                            padding: bottom: 0,
                            min: 0
                        ,
                        x: 
                            padding: left: 0,
                            min: 0,
                            show: false
                        
                    

                );
            
        </script>
    </head>
    <body>
        <div id="chart"></div>
    </body>
</html>

当我检查开发者工具的控制台时,我得到的是这样的:

c3.js:5783 Uncaught TypeError: Cannot read property 'category10' of undefined

我尝试了不同版本的 c3.js,但没有。这很奇怪,因为它在 jsfiddle 中工作,而不是在我的本地。

【问题讨论】:

尝试为两个库提供完整的绝对路径。将代码移到正文的末尾也是一个好主意。 做了一些组合后,原来是d3.js路径不起作用。我试图提供整个 localhost 路径和 C: 驱动器路径,但它仍然无法正常工作。我得到的解决方案是使用外部 url (d3js.org/d3.v3.js)。我不知道它是如何工作的,但是,是的,它现在正在工作。感谢您的想法。 :) 不管怎样,我通过从 D3.js v4 (4.1.1) 降级到 v3 (3.5.17) 解决了另一个项目中完全相同的 JS 错误。 @ArtoBendiken,嘿,它有效!谢谢!如果可以的话,我会投票赞成你的评论。 @JJC 酷!由于它对您有用,因此我添加了一个正确的答案,以便其他偶然发现该问题的人能够弄清楚。 【参考方案1】:

我通过从 D3.js v4 (4.1.1) 降级到 v3 (3.5.17) 解决了另一个项目中完全相同的 JavaScript 错误。

事实证明,C3.js,截至 2016 年 7 月,does not support D3.js v4:

它肯定不会在 [D3.js] 4.0 中按原样工作。 D3 v4 具有完全不同的命名空间,并且绝不向后兼容。更新到 v4 是一项非常重要的任务。

【讨论】:

你可以在这里获取版本github.com/d3/d3/releases/tag/v3.5.17?感谢您的回答,这对您有很大帮助。 如果您不使用 npm 并且使用 D3 的 rails gem 将此代码添加到您的 gem 文件将解决问题gem 'd3-rails', '~&gt; 3.5.17' rubygems.org/gems/d3-rails/versions/3.5.17 哦,这也是我在上面评论中引用的 gem 版本的链接。 c3.js版本重要吗?【参考方案2】:

这是因为,C3.js是基于D3 v3,尝试用D3 v4运行时出现错误。

错误发生在以下代码行:

pattern = notEmpty(config.color_pattern) ?
    config.color_pattern : d3.scale.category10().range()
https://github.com/c3js/c3/blob/master/src/color.js#L7

在 D3 v4 上,d3.scale.category10().range() 应该用作 d3.scaleOrdinal(d3.schemeCategory10),但由于 C3.js 不能在 D3 v4 上运行,因此仅更改这部分代码是没有意义的。


如果有人需要使用 D3 v4+,请尝试https://naver.github.io/billboard.js/。

billboard.js 是 C3.js 的一个 fork 项目,具有与 D3 v4+ 支持相同的接口。

【讨论】:

【参考方案3】:

问题是您使用的 C3 版本不支持您使用的版本:

D3 ver | requires C3 ver
3.x    |  0.4
4.x    |  0.5
5.x    |  0.6

只需确保您使用的是正确版本的 C3,您就不会看到此错误。

【讨论】:

以上是关于C3JS - 无法读取未定义的属性“category10”的主要内容,如果未能解决你的问题,请参考以下文章

带有 Ionic 4 的 SQLite?无法读取未定义类型错误的属性“then”:无法读取未定义的属性“then”

`无法读取未定义的属性(读取'组件')`

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

使用地图时反应'无法读取未定义的属性'

如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?

查询返回错误“无法读取未定义的属性(读取'节点')”