在Rails视图中访问D3动态json对象

时间:2014-01-14 15:30:55

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

我正在学习D3并开始,我尝试显示一个图表,我在其中硬编码json数据

我创建了一个JSFiddle来说明这个http://jsfiddle.net/Nu95q/1/

正确显示图表

但是现在我想在我的Rails项目中将它集成到一个带有ajax链接的json数据中,所以在点击链接时,在控制器中创建了json数据,图形将替换为新的。

D3代码位于assets/javascripts/my_controller.js.coffee

这就是我在我的控制器中所拥有的:

  def identification_item
    @sii = params[:sii_id]
    @fragments = SpectrumIdentificationItem.find(@sii).fragments
    respond_to do |format|
      format.js { render json: @fragments }
   end
 end

通过检查chrome的检查器“网络”面板,我可以看到生成的json对象具有正确的数据,

现在我的问题是如何在D3中访问这个json变量?我试图用控制器中生成的json替换硬编码变量,如下所示:

jsonFragmentIons = @fragments

但似乎assets/javascripts/my_controller.js.coffee

无法访问@fragments

(我已经检查了SO“在D3中访问json”但是我到目前为止检查的所有问题似乎都是指读取.json文件或包含json而不是动态json对象的静态变量)

此外,我可能缺乏关于如何在客户端和服务器端之间传递json数据的一些基本概念,我对它很陌生。所以任何帮助都非常感谢

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,我会在这里解释我是如何解决这个问题的。 好吧,似乎你必须使用d3.json。根据d3 reference d3.json可以用于“异步加载数据”,在这种情况下,“依赖于加载数据的代码通常应该存在于回调函数中”。 所以在我的coffeescript中我写道:

d3.json "json_generator_controller/action", (error, json) ->
 return console.warn(error)  if error
 data = json
 visualizeD3spectrum data

然后

 visualizeD3spectrum = (data) ->
 //D3 svg stuff