从lift片段中获取d3中的json数据



我目前正在使用d3和数据的json对象实现一个图。在这里可以找到这样一个图形的工作示例:http://bl.ocks.org/950642.如果你知道d3,你当然可以直接跳到我的问题部分。

代码的快速概述

所以,基本上在我的模板中,我有必要的最低代码:

<div id="main" class="lift:surround?with=default;at=content">
<div class="lift:GraphVisual.showGraph"></div>
</div>

然后在我的代码段(GraphVisual.scala)中,我有以下内容:

def showGraph = {
<h3>Bachelor 5/6 - Communication Systems</h3> ++
<div id="graph-container" width="500px" height="100px">
<script type="text/javascript" src="static/scripts/graph_script.js></script>
</div>  

在定义图形的javascript文件(graph_script)中,我主要有以下

var vis = d3.select("#graph-container").append("svg:svg")
d3.json("static/scripts/jsonData.json", function(json) {
//Do stuff
}

我的问题

如果我将json数据存储在一个文件中,如上所示,一切都很好。现在我想用lift生成json对象。因此,我希望有一个函数在Lift中返回图形的json对象表示,并在脚本中使用它(应该是静态的)。

我尝试了什么

假设我有以下值定义我的图:

val graph = JObject(JField("nodes", JArray(List(...))), JField("links", JArray(List)))

我试图将此图定义为d3脚本之上的脚本中的变量:

<script>{JsCrVar("myGraph", graph).toJsCmd}</script>

使用这种方法,我有一个定义良好的变量myGraph,但我不知道如何在graph_script.js中访问它

您可以将json数据检索转移到REST API。

object MyGraphApi extends RestHelper {
serve {
case Req("graph" :: Nil, _, GetRequest)  => {
JsonResponse(myGraphObject)
}
}
}

然后,您可以使用/graph-url将其ajax拉入页面。

Lukasz的解决方案,使用REST API完全可以工作。在我的研究过程中,我还发现我的问题只是一个javascript问题:我不需要使用d3.json(...)

所以我只需要删除函数d3.json(...),把里面的东西都放在外面。然后只调用mygraph.nodes,而不是json.nodes

相关内容

  • 没有找到相关文章

最新更新