d3.js选择条件渲染

时间:2015-02-09 16:53:29

标签: javascript d3.js

使用d3js连接模型,是否可以根据数据内容进行条件渲染?

我想做这样的事情:

var nodes = svg.selectAll('.node').data(nodes);

var node = nodes.enter().insert('svg:g').attr('class', 'node');

// if node.hasDuration {
   node.insert('svg:rect');
//} else {
   node.insert('svg:circle');
//}

nodes.exit().remove();

似乎没有一种方法可以使用连接模型(输入/退出)来进行条件渲染。我可以用selection.each()来强制它,但这似乎打败了选择模型的目的。

1 个答案:

答案 0 :(得分:4)

您可以使用filter

var nodes = svg.selectAll('.node').data(nodes);

nodes.enter()
  .insert('svg:g')
  .attr('class', 'node');

nodes.filter(function(d,i){
  return d.hasDuration;
}).append('svg:rect');

nodes.filter(function(d,i){
  return !d.hasDuration;
}).append('svg:circle');

示例here