8
私はデータに基づいてコンテンツを生成するためにd3.jsライブラリを使用しています。d3.jsでデータを再バインドする最良の方法
ここでは簡単な例を示します。
data_arr = [0,1,2,3,4];
d3.select("#mylist").selectAll('li').data(data_arr).enter().append("li").html(
function(d)
{
var element = document.createElement('div');
element.innerHTML = '<div id="innerDiv">' + d + '</div>';
return element.innerHTML;
});
私の配列を変更した場合、たとえば、新しいデータは[5,3]です。新しいHTMLを再バインドして表示するにはどうすればよいでしょうか?私は同じ文章をもう一度呼び出す必要がありますか、それとも良い方法ですか?
もっと複雑なデータ構造の場合を考えてみましょう。私はobj1.field = 'newValueに' を実行どうなり すなわち
data_arr = [obj1, obj2, obj3, obj4];
と
element.innerHTML = '<div id="innerDiv">' + d.field + '</div>';
。リバインドはどのように行われますか?
ありがとうございます!
私のシナリオは少し複雑です。私のデータは複雑なオブジェクトです。私がdata_arr = [obj1、obj2、obj3]を持っていれば;私はobj1.field = newvalueを変更します。私は再バインドしたい場合はどうなりますか? d3.select( "#mylist")を作成する必要がありますか?selectAll( 'li')。remove();もう一度 "list"関数を呼び出しますか?より良い方法がありますか? – Tony
いいえ、すべてのli要素を削除する必要はありません。 data-joinは既存の要素のみを削除します。オブジェクトを追加したり削除したりせずにデータを更新した場合、 'd3.select("#list ")。call(list、data)'だけで表示を更新することができます。この場合、入力と終了の選択は空です。 – mbostock
ただし、オブジェクトの特定のフィールドが変更されている場合は、#innerDivコンテンツは更新されません。または私は何か間違っている? dinner.itlect( "#list")call(list、data)#innerDivの内容をd.fieldの新しい値で更新しますか? – Tony