Javascript InfoVis SpaceTree `ST.select()` メソッドによるノードの折りたたみを防ぐにはどうすればよいですか?
-
26-09-2019 - |
質問
私は JavaScript InfoVis Toolkit を使用しています。特に、 スペースツリー 視覚化。
ツリー全体を展開して、特定のリーフ ノードからルートに戻るパスを表示する必要があります。
ツリーは問題なく展開できましたが、リーフ ノードを選択し、ルートに戻るパスを強調表示することで問題が発生しています。
私が使用しているのは、 ST.select(node, onComplete)
関数を使用して関心のあるリーフ ノードを選択すると、ルート (線とノード) に戻るパスが強調表示されます。
これを行うために、私は onBeforePlotNode
そして onBeforePlotLine
ST.Controller
ノードをルートとそのプロットラインまでハイライトできるようにするメソッド:
onBeforePlotNode: function(node){
//add some color to the nodes in the path between the
//root node and the selected node.
if (node.selected) {
node.data.$color = "#dddddd";
} else {
delete node.data.$color;
}
},
onBeforePlotLine: function(adj){
if (adj.nodeFrom.selected && adj.nodeTo.selected) {
adj.data.$color = "#33CC33";
adj.data.$lineWidth = 5;
} else {
delete adj.data.$color;
delete adj.data.$lineWidth;
}
}
問題は、私が電話したとき、 ST.select()
リーフ ノードを強調表示するには、このレベルの下にあるすべての子ノードが折りたたまれ、非表示になります。
これを実際に確認するために、いくつかの例をアップロードしました。
ツリー全体の展開 - リーフが選択されていません
リーフが選択されています - パスは表示されていますが、ノード N2 の下の子はすべて欠落しています
ブラウザ ウィンドウが少し小さい場合は、下にスクロールする必要がある場合があります。
そこで私の質問は、レベル 3 の子 (レベル 1 がルート) を折りたたまずに、JavaScript InfoVis でリーフ ノードからルート ノードまでノードを表示するにはどうすればよいでしょうか?
自分の葉ノードを見つけて、ツリーをルートに戻る方法 (途中でスタイルを設定する) があれば、そうするでしょう。
解決
すべてのコードを調べて、console.log() 呼び出しとブレークポイントを散乱させた後、見つけました。
それはイニシャルと関係があります onClick
呼び出し、グラフがバックグラウンドで実行されている更新ループであるという事実、およびそれ以外のすべてが実行されるという事実 onClick
無視しているようです busy
グラフの状態。
何が起こるのですか
onClick
呼び出され、一連のイベントがトリガーされます。その一部は非同期ですselect
多かれ少なかれ同期的に呼び出され、その作業を実行しますonClick
ようやく完了しましたが、その副作用の 1 つは、グラフが再展開されることです。select
設定しましたclickedNode
そしていまonClick
新しく設定された値を使用して台無しにします
解決
再設計する必要がある select
したがって、グラフのビジー状態が考慮されます。
select: function(id, onComplete) {
var that = this;
if (this.busy) {
window.setTimeout(function() {
that.select(id, onComplete);
}, 1);
return;
}
// original select code follows here (remove the old var that = this; assignment)
これですべてです。ビジー状態をチェックし、ビジー状態になるまで選択を遅らせます。 false
。これは、他のすべての関数にも適用する必要があります。 onClick
これらは外部から呼び出されますが、ここのライブラリ設計者は、何が副作用をもたらし、何が副作用を引き起こさないのかを示すという点で悪い仕事をしました。
他のヒント
「constrained:」を設定してみましたか?STのプロパティに「false」?それで解決しました。
http://thejit.org/static/v20/Docs/files/Visualizations/Spacetree-js.html