【问题标题】:How to create d3 graph using data from Rails database如何使用 Rails 数据库中的数据创建 d3 图形
【发布时间】:2014-06-30 16:21:02
【问题描述】:

我学会了使用d3 book 创建 d3 图,其中所有数据集都直接包含在 <script> 标签中,而标签又包含在 html 正文中。

我现在想在我的 rails 应用程序中使用 d3,但我不知道如何:

  1. 将数据从我的 Rails 数据库传递到我的 d3 脚本
  2. 如何“部分输出”javascript?我看过关于“不引人注目的 javascript”的材料,但它们通常是关于 AJAX 表单提交的,我很难将其转换为图形绘制(即包括使用应用数据绘制的图形的 <div>)。

目前还没有解决这两个问题的答案,因此希望这可以成为未来 Google 员工的参考。

【问题讨论】:

    标签: javascript ruby-on-rails d3.js


    【解决方案1】:

    在我看来,通过 AJAX 请求数据将是做到这一点的“最干净”的方式。您可以使用 jQuery 的 ajax 方法发出 GET 请求,说出“/get_data.json”(您必须将其添加到您的 routes.rb),这将返回一个带有数据的 JSON。

    类似的东西。

    //your JS file
    $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: '/get_data',
                dataType: 'json',
                data: "{}", 
                success: function (received_data) {
                   var div_where_to_draw = "div.mygraph";
                   your_d3_function(div_where_to_draw, received_data);
                },
                error: function (result) {
                }
        });
    function draw_histogram(where_to_draw, data_to_draw){
      //Your d3js code here
    }
    

    (请注意,此JS代码是对答案here的翻版)

    这就是你的控制器提供数据的样子(注意我创建了一个新控制器,你可能不想这样做,而只是在现有控制器中使用一个新动作):

    #app/controllers/data_controller.rb
    class DataController < ApplicationController
      def get_data
        respond_to do |format|
          format.json {}
        end
      end
    end
    

    这就是您的数据的样子:

    #app/views/data/get_data.json
    [1,1,2,3,5,8,13,21,34,55]
    

    【讨论】:

    • 感谢您的帮助!您能否解释一下如何将图表包含在我的视图中,最好将.js“部分输出”到外部文件中?我是否需要创建一个&lt;div&gt; 来包含svg?因为我的 svg 在底部被压扁了……
    • 您的意思是如何将图表放在您喜欢的 div 中?我几乎没有使用过d3js,但我假设你可以在某个地方创建一个带有idclass 的div,`
      ",然后在您的 JS 文件,您可以在该 div 中附加图表。检查此示例d3-generator.com,例如注意第 19 行。也请查看此问题stackoverflow.com/questions/21860657/…。(不要错过 jsfiddle 链接!)
    猜你喜欢
    • 2014-02-13
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多