私のウェブサイトにネットワークを表示するために、強制レイアウトの例(http://bl.ocks.org/1153292)を使用しています。基礎となるデータが変更された場合のD3強制レイアウトの要素の更新方法
私はユーザーがいつでもどの種類のリンクを見るかを選択することができます。リンクタイプAを表示することを選択すると、リンクタイプBを追加してリンクタイプAを削除すると、タイプBの残りのリンクはAカラーで表示されます。
これは、svg図へのリンクを追加するために実行されるコードです。私はそれにリンクを追加したり削除したりして、配列this.links
を変更しています。あなたが見ることができるように私はクラス属性を設定するが、それは更新されていない - それは私が現在、ダニ機能内部クラス属性が、このオフコースの原因を更新することでこの問題を回避するリンクA.
var path = svg.append("svg:g")
.selectAll("path")
.data(this.links)
.enter()
.append("svg:path")
.attr("class", function(d) { return "link " + d.type; })
.attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
のタイプのまま多くの不必要な作業。
私は、既存の要素と新しい要素のマージされた選択を返すので、attr操作は既存の要素を更新して新しい要素を設定する必要があります。
私には何が欠けていますか?
Ido、これは古い投稿であることは分かっていますが、あなたと同じ問題が発生していると思いますが、この解決策はまだ分かりません。どのように動作するのか、元の問題をどのように解決するのか説明できますか?ありがとうございました。 – Mars
cxとcyのattrの更新がenter()コンテキストの外にあるので、毎回発生するので、このソリューションは機能します。元のコードでは、attr関数はenter()コンテキスト内で呼び出されるため、オブジェクトIDに基づいて作成されるのは1回だけです。私にとって、データの第2引数として重要な機能について学ぶことは何だったのですか?(http://bost.ocks.org/mike/constancy/) – velotron