次の単純な更新パターンが機能しない理由について私は困惑しています。私が見る限り、これは推奨General Update Patternに従います。d3.selectionで一般的な更新パターンが期待通りに機能しない
<script src="https://d3js.org/d3-selection.v1.min.js"></script>
...
var dat = ["One","Two","Buckle my shoe"];
var sel = d3.selectAll("p.test").data(dat);
sel.enter().append("p").classed("test", true);
sel.exit().remove();
//update 1 ... doesn't work
sel.text(function(d) { return d;})
段落は正しく作成されますが、テキストは設定されません。しかし、私がこれを行うと:
//update 2 ... this works as expected
d3.selectAll("p.test").text(function(d) { return d;});
...すべてうまくいきます。最初のバージョンは常に過去に働いていました。
更新:私はフルD3ライブラリを使用してみました...
<script src="https://d3js.org/d3.v4.min.js"></script>
...と最初のバージョンは再び動作します。私はd3.selection以上必要ですか?
私の過去の慣行は、選択をパラメータとして受け取る別の更新機能を定義することでした。たとえば、function doUpdate(sel) { sel.text(...);}
のサイズがのデータ要素の変更はほとんどないと考えられますが、多くの変更がの内容にあると考えられます。選択を変数として保存し、その上で更新を繰り返し実行することは以前よりうまくいきました。
4 .enter()と.remove大丈夫作品:念頭に置いたものとそう
は、このは動作しません。使用しなければならない.merge()https://github.com/d3/d3-transition/blob/master/README.md#transition_mergeこれは、あなたのupdate1が動作しないという事実と関係しているかもしれません。あなたが提供したサンプルを見ると、それはmerge()を利用しています。 '.classed(" test "、true)'の後に '.merge(text) .text(function(d){return d;});' ' – Tekill
これはd3-transitionの使用を必要とするかもしれません.enter()、.exit()、.remove()、.merge()...を使用しています。 – Tekill
@あなたのご意見ありがとうございます。私はトランジションを使用していませんし、すでに余分なスクリプトを追加する必要がない回避策があります。しかし、あなたが投稿したリンクを見直して、トランジション、カラー、ディスパッチ、イージー、補間、タイマースクリプトの追加が問題に何の影響も与えなかったことを確認できます。 –