最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Best way to rebind data in d3.js - Stack Overflow

programmeradmin0浏览0评论

I am using d3.js library to generate contents based on data.

Here is a simplified example.

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;
   });

If I change my array, for example the new data is [5,3]. How is the best way to rebind and show the new html? Do I have to call the same sentence again or is it a better way?

Consider the case of a more complex data structure. i.e.

data_arr = [obj1, obj2, obj3, obj4]; 

and

element.innerHTML = '<div id="innerDiv">' + d.field + '</div>';

What happens if I do obj1.field = 'newValue'. How is the rebind done?

Thanks!

I am using d3.js library to generate contents based on data.

Here is a simplified example.

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;
   });

If I change my array, for example the new data is [5,3]. How is the best way to rebind and show the new html? Do I have to call the same sentence again or is it a better way?

Consider the case of a more complex data structure. i.e.

data_arr = [obj1, obj2, obj3, obj4]; 

and

element.innerHTML = '<div id="innerDiv">' + d.field + '</div>';

What happens if I do obj1.field = 'newValue'. How is the rebind done?

Thanks!

Share Improve this question edited May 23, 2012 at 18:34 Tony asked May 22, 2012 at 21:18 TonyTony 10.2k22 gold badges87 silver badges144 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 18

Use a function. For example, here's a function that will populate a list from an array of strings:

function list(ul, data) {
  var li = ul.selectAll("li").data(data);
  li.exit().remove();
  li.enter().append("li");
  li.text(function(d) { return d; });
}

Now if you want to initialize your list, you can say:

d3.select("#list").call(list, [0, 1, 2, 3, 4]);

Then later if you want to update, you can say:

d3.select("#list").call(list, [5, 3]);

If you prefer (and you don't need method chaining), you can write this without selection.call:

list(d3.select("#list"), [5, 3]);
发布评论

评论列表(0)

  1. 暂无评论