Rails的,RequireJS,C3.js:C3是未定义

问题描述 投票:2回答:2

我想在铁轨与RequireJS应用程序一起使用c3.jsd3.js。我application.html.erb如下所示:

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %></title>
    <%= stylesheet_link_tag "application", :media => "all" %>
    <%= stylesheet_link_tag params[:controller] %>
    <%= csrf_meta_tags %>
  </head>
  <body>
    <div>
      <%= yield %>
    </div>
    <%= requirejs_include_tag params[:controller] %>
  </body>
</html>

电流控制器是instructor和得到成功加载该文件,instructor.js如下所示:

instructor.js

require(["jquery", "modules/d3.min", "modules/c3.min"], function($, d3, c3)
{
  console.log(d3);
  console.log(c3);
});

现在,运行应用程序时,有没有错误,但c3是不确定的。这里是控制台输出:

安慰

Object {version: "3.4.13", ascending: function, descending: function, min: function, max:function…} // instructors.js:3
undefined  // instructors.js:4

所以d3.js被载入罚款,但c3.js是不确定的。我不明白发生了什么事情错在这里。请帮忙。

谢谢!

ruby-on-rails d3.js requirejs c3.js
2个回答
1
投票

当C3是初始化它正在寻求在全球范围内D3,如果它不能找到它,它试图解决它与D3的命名路径需要。如果你是在同一时间使用需要加载D3和C3这种依赖性可以创建一个比赛条件。

c3.js

function ChartInternal(api) {
    var $$ = this;
    $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require("d3") : undefined;
    ...
}    

如果您设置您需要的配置设置为D3这应该解决该问题的明确路径。

requirejs.config({
    paths: {
        "d3": "modules/d3.min",
        "c3": "modules/c3.min"
    }
});

require(["d3", "c3"], function (d3, c3) {
    console.log(d3);
    console.log(c3);
});

安慰

Object {version: "3.5.6", behavior: Object, event: null, ns: Object, time: Object…}
Object {version: "0.4.10", chart: Object}

0
投票

它发生在我身上,我的应用程序未提供静态文件。你可以在浏览器的开发者工具的网络选项卡中勾选ID:所有的JS和CSS文件返回404错误。

为了解决这个问题,我添加app.UseStaticFiles();在Startup.cs文件的配置方法。

现在,脚本加载和c3被定义。

我希望这可以帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.