これはJSの一般的な質問ではありません。 ScalaJSのヘルプが本当に必要です。ScalaJSを使用してJSONからD3ツリーを作成する
私は数日間、単純な接続ツリーグラフを描こうとしています。それは任意に深く入れ子にすることができます。私は、このファイルを読み込む:
{
"name": "Animal",
"children": [
{
"name": "Vertebrates",
"children": [
{
"name": "Mammals"
},
{
"name": "Birds"
}
]
},
{
"name": "Invertebrates"
}
]
}
私はこのプログラムを実行すると:
package example
import scala.scalajs.js
import org.singlespaced.d3js.{Link, Tree, d3}
@js.native
trait AnimalNode extends js.Object {
val name: String = js.native
val children: js.Array[AnimalNode] = js.native
}
object ScalaJSExample extends js.JSApp {
def main(): Unit =
d3.json("json-example.json", (error: js.Any, json: js.Any) => {
val jsonTypedFromFile = json.asInstanceOf[AnimalNode]
val width = 960.0
val height = 500.0
val tree: Tree[AnimalNode] = d3.layout.tree().size((width, height))
val nodes = tree.nodes(jsonTypedFromFile)
val links = tree.links(nodes)
val svg = d3.select("#tree").append("svg")
.attr("width", width).attr("height", height).append("g")
val diagonal = d3.svg.diagonal() //Want to draw Diagonals across all links.
svg.data(links)
.append("path")
.attr("class", "link")
.style("stroke-width", 5)
.attr("d", (myJson: Link[AnimalNode], x: Int, y: js.UndefOr[Int]) => {
??? // TODO: Draw Diagonal between source & target. Never reached.
})
println("Finished drawing paths.")
})
}
を私はFirebugの中にこのエラーが表示されます。
uncaught exception:
scala.scalajs.runtime.UndefinedBehaviorError:
An undefined behavior was detected:
[object Object] is not an instance of org.singlespaced.d3js.Link
私がターゲットにする必要があるかもしれません代替署名があります:
.attr("d", (myJson: Link[Node], x: Int, y: js.UndefOr[Int]) => { ... }
ドはScalaJSD3例アプリのフォークであり、ここでは提供されています:https://github.com/swoogles/scala-js-d3-example-app
それはJavascriptをここにコード平野に触発された:私は、少しバギーと不完全であるhttp://bl.ocks.org/d3noob/8375092
あなたはここに多くのコードを持っています。エラーを表示させるために必要なビットまで最小化できますか?これは通常、このような不思議なものをデバッグするための第一歩です... –
@JustinduCoeurどちらが正しい答えに近いかわからないので、私は両方の試みを含めました。私はそれをカットしてうれしいですが、私は動的オプションまたはAnimalNodeオプションを削除する必要がありますか? –
必ずしも問題ではありません。無駄なことではありません。「これはうまくいくと思いますが、エラーを出す」と説明するだけです。余分な行はありません。裸の骨にデータ構造をカットし、1つの経路にカットし、カット、カット、カットします。それはエラーを最小限にする心臓部であり、誰かの注意を引くためにはしばしば必要です。 (そして、しばしば、そうするプロセスが問題がどこにあるか明らかにする) –