D3.js如何只创建一个绑定到多个数据项的数据集的元素
D3.js How to create just 1 element that is binded to a dataset of multiple data items
我有一个包含5个对象的数据集。我为每个对象创建一个SVG,因为它们需要自己的SVG画布,因为我正在为每个对象绘制一个进度完成圆。我需要能够将我的文本元素绑定到我的数据,但是,我不想为每个对象创建5个文本元素,只想创建1个文本元素并设置文本字段以返回正确的索引。
如何让D3只绘制一个元素(但仍然绑定到我的数据),而不是为每个对象绘制一个元件。代码如下:
// Create svg for every data item
var svg = slideContainer.selectAll("svg").data(data);
svg.enter()
.append("svg")
.attr({
"data-id": function (d, i) { return i; },
"class": svgClass
});
svg.exit().remove();
var text = svg.selectAll("text").data(data, function (d) { return d.Margin; });
text.enter()
.append("text")
.attr({
"data-id": function (d, i) { return i; }
})
.text(function (d) {
return data[$(this).attr("data-id")].Margin;
});
text.exit().remove();
text.transition().duration(750)
.attr({
"x": 100,
"y": 100,
"fill": "white",
"class": function (d) {
if ($(this).attr("data-id") != $(this).parent().attr("data-id")) {
return "hide";
}
},
"id": "text"
})
.text(function (d) {
return d.Margin;
});
您所拥有的是接近的。你只需要一个容器,然后把你的svg附加到你的容器上,就像这样:
var svgContainer = slideContainer.selectAll("svg").data(data).enter();
var progressBar = svgContainer.append("svg")
.attr({
"data-id": function (d, i) { return i; },
"class": svgClass
});
var progressBarText = svgContainer
.append("text")
//and so on
svgContainer.exit().remove();
编辑
除非你想把它附加到你的进度条svg:
var progressBarText = progressBar.append('g')
.append("text")
//and so on. This will use the same data as the progress bar
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 如何将ngrepeat下的ngmodel绑定到$scope
- WinJS内联绑定语法
- D3.js如何只创建一个绑定到多个数据项的数据集的元素
- 如何防止重新绑定对剑道网格数据项的更改