我已经使用框架工作D3线图这里概述:http://bost.ocks.org/mike/chart/D3图表与常用代码分离出来
由于我建立了大量的图表我想以分离出公共元件(宽度和身高)例如)到一个单独的文件,但我真的不知道如何在可重用框架内做到这一点。
这里是调用JavaScript文件:
var common = commonChart()
.main_height(400)
.main_width(600);
var chart = multiLineChart()
.x(function(d) { return d.date; })
.y(function(d) { return d.number; })
.yLabel("Number")
.dimKey(function(d) { return d._id.env; })
.yTickFormat(function(d) { return d3.round(d); })
.yScale(d3.scale.sqrt())
.color(d3.scale.category10());
d3.json('data/datafile.json', function(data) {
d3.select("#graph")
.datum(data)
.call(common)
.call(chart);
});
通用文件是这样的:
function commonChart() {
var main_width, main_height;
function chart(selection) {
console.log(main_height);
}
// Get/set main_width
chart.main_width = function(value) {
if (!arguments.length) return main_width;
main_width = value;
return chart;
}
// Get/set main_height
chart.main_height = function(value) {
if (!arguments.length) return main_height;
main_height = value;
return chart;
}
}
的multiLineChart具有全部为线图本身的核心逻辑。当我运行这个时,我结束了Cannot read property 'main_height' of undefined
。有没有办法使用可重复使用的图表框架与D3做到这一点?
谢谢!
如果我明白你正确地做什么,这是不可能的。你想要在组件中的所有内容必须位于相同的函数/闭包中。但是,您可以使用其他组件内的组件来实现重复功能。 –
好的,我怀疑它是否会起作用。你能详细说说把组件放在其他组件里面吗?谢谢! – JamesE
你不会把它们放在彼此之中,而是在另一个组件中使用一个组件。例如,您可以使用内部使用轴组件的条形图组件。 –