我正在学习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
(我已经检查了SO“在D3中访问json”但是我到目前为止检查的所有问题似乎都是指读取.json文件或包含json而不是动态json对象的静态变量)
此外,我可能缺乏关于如何在客户端和服务器端之间传递json数据的一些基本概念,我对它很陌生。所以任何帮助都非常感谢
答案 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