1
d3.jsのデータバインディングについて明確に理解できないことがあります。d3.jsデータバインディングの更新
4つの番号が表示されている私は(それが hereを見つけることができます)簡単な例を設定している:
var data0 = [1, 2, 3, 4];
var data1 = [5, 6, 7,8];
var data2 = [10, 11,12];
var lgth = 100;
var wdth = 50;
var position = [[0,0],[0,wdth], [lgth,0],[lgth,wdth]];
var svg = d3.select("#test").append("svg")
.attr("width", wdth+100)
.attr("height", lgth+100);
svg.selectAll("text").data(data0)
.enter().append("text")
.text(function(d){return d;})
.attr("x",function(d,i){return position[i][0]+30;})
.attr("y",function(d,i){return position[i][1]+30;});
しかし、私はその機能を使用して、これらの4つの数字更新しようとすると:
function draw1(){
svg.selectAll("text").data(data1)
//.enter().append("text") /* if not commented does nothing*/
.text(function(d){return d;})
.attr("x",function(d,i){return position[i][0]+30;})
.attr("y",function(d,i){return position[i][1]+30;});
}
を
.enter().append("text")
がコメントされている場合にのみ動作します。どうして ?新しいバインディングのデータが前のバインディングよりも少ない場合はどうなりますか?
ありがとうございました!
感謝。しかし、両方のデータセットが同じ長さであっても、.enter()。append( "text")は最初と同じように動作し、テキストを上書きしないでください。 (これは当てはまりません) 2番目の関数では、svg.selectAll( "text")。exit()。remove()も追加されました(http://codepen.io/anon/pen/MJKRER?エディタ= 1010)を小さなデータセットで削除しても、古い要素は削除されません。 – Guillaume
@Guillaume 'enter()'と書いた瞬間、入力選択があります。サイズは** zero **です。データ配列は同じです。したがって、 '.enter()。append(" text ")'は決して動作しません。 –
@GerardoFurtadoありがとうございます。これは少し明確です。つまり、enter()は新しい要素だけのためです。ですから、data1.length = 5としましょう。これは、更新する4つのテキストと作成する1つのテキストがあることを意味します。それをどうすれば実現できますか?私がenter()を書くと、5番目の要素が作成されますが、他の4つは更新されません。逆に、私がenter()を書かなければ、4つのテキストを更新しますが、5番目は作成されません... exemple [here ](http://jsbin.com/herikojeke/edit?html,js,output) – Guillaume