【发布时间】:2016-11-13 07:19:21
【问题描述】:
此函数在页面加载时运行,并且在表单中输入数据时运行。它在页面加载时可以很好地绘制图形,但在提交新信息时不会重绘。
当我在数据连接后记录元素时,它会显示数据数组的更新长度和更新的元素数量,但它们不会重绘。任何想法,只需扫描此代码?感觉差不多了,但是数据更新过程的步骤我没看懂。
这是基于基本条形图教程let's make a bar chart,它使用 div 而不是 svg 元素,但我认为这不重要。
this.render = function(self){
if(self.data){
self.x = d3.scaleLinear()
.domain([0, d3.max(self.data.map(function(d) {
return parseInt(d.daily_count);
}))
])
.range([0, 500]);
var bars = d3.select("#chart")
.selectAll("div")
.data(self.data)
.enter().append('div')
.attr('class', 'bar-container row');
console.log('chart', d3.select("#chart").data(self.data));
bars.append('div')
.attr('class', 'label four columns')
.text(function(d) {return d.date_string; });
bars.append("div")
.attr('class', 'bar eight columns')
.style('background-color', function(d){
return (d.daily_count == 0 ? 'white' : '#1EAEDB')
})
.style('color', function(d){
return (d.daily_count == 0 ? 'red' : 'white')
})
.style("width", function(d) {
return self.x(d.daily_count) + "px";
})
.text(function(d) {
return (d.daily_count == 0 ? 'closed' : d.daily_count)
});
}
编辑:尝试使用 .merge() 和 .each() 创建和更新图表。我不知道如何动态更新每个栏是一个包含两个实际显示数据的子 div 的 div。这仍然不能动态工作,尽管它像上面一样呈现:
this.render = function(self){
if(self.data){
self.x = d3.scaleLinear()
.domain([0, d3.max(self.data.map(function(d) {
return parseInt(d.daily_count);
}))
])
.range([0, 500]);
var chart = d3.select("#chart");
var bars = chart.selectAll("d")
.data(self.data)
bars.enter().append('div')
.attr('class', 'bar-container row')
.each(function(d) {
d3.select(this).append('div')
.attr('class', 'label four columns');
d3.select(this).append('div')
.attr('class', 'bar eight columns');
})
.merge(bars)
.each(function(d){
d3.select(this).selectAll('div.label')
.text(function(d) {return d.date_string; });
d3.select(this).selectAll('div.bar')
.style('background-color', function(d){
return (d.daily_count == 0 ? 'white' : '#1EAEDB')
})
.style('color', function(d){
return (d.daily_count == 0 ? 'red' : 'white')
})
.style("width", function(d) {
return self.x(d.daily_count) + "px";
})
.text(function(d) {
return (d.daily_count == 0 ? 'closed' : d.daily_count)
});
})
bars.exit().remove();
【问题讨论】:
标签: javascript d3.js