繁体   English   中英

如何更新d3表?

[英]How to update d3 table?

当鼠标移动时,我有一些问题要更新我的d3.js表。 这是jsfiddle中的简化示例

这是主要代码:

 function mousemove() {

  var newdata = [{Variable: "x", Value: 1}, {Variable: "y", Value: 1}]

  table.selectAll("tbody.tr")
    .data(newdata)
    .enter()
    .append("tr")
    .selectAll("td")
    .data(function(row) {
      return columns.map(function(column) {
        return {column: column, value: row[column]};
      });
    })
    .enter()
    .append("td")
    .text(function(d) { return d.value; });
};

也就是说,我怎样才能只更新表中的值而不是一次又一次地绘制新表?

谢谢!

使用您之前定义的选择(在jsfiddle示例中)

var table = d3.select("body").append("table");
var tbody = table.append("tbody");

使用此选择,您可以更新现有表。 在mouseover()函数中,您已使用enter()作为更新表的尝试。 但是由于enter()看到所需的占位符数(2行的2个占位符)已经存在,它将不会执行任何操作。 您可以通过删除enter()和append语句并执行以下操作来进行更新:

tbody.selectAll("tr")
  .data(newdata)
  .selectAll("td")
  .data(function(row) {
    return columns.map(function(column) {
      return {
        column: column,
        value: row[column]
      };
    });
  })
  .text(function(d) {return d.value;});

理想情况下,您应该按照enter(),update()和exit()顺序进行此类d3更新,但对于这种情况,上述更改就足够了。

http://bl.ocks.org/mbostock/3808218上有关于更新模式的精彩教程。

通常用于更新您应该有一个数据连接键,作为.data(values,key)中的第二个参数传递。

我使用输入,更新,删除模式更新了你的jsfiddle以供参考:

 var rows = table.selectAll("tbody tr")
.data(newdata, function (d) {return d.Variable;});

rows.enter()
.append('tr')
.selectAll("td")
.data(function (d) {return [d.Variable, d.Value];})
.enter()
.append("td")
.text(function(d) { return d; });

rows.exit().remove();

var cells = rows.selectAll('td')
.data(function (d) {return [d.Variable, d.Value];})
.text(function (d) {return d;});

cells.enter()
.append("td")
.text(function(d) { return d; });

cells.exit().remove();

https://jsfiddle.net/qL7knnkv/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM