在d3.js中编写了可重复使用的图表后,我希望公开X轴 AND Y轴的.tickFormat()
方法。问题是它们都有相同的方法名称,因此我的直方图对象只能调用最近添加的.tickFormat()
方法。
d3.ninja.histogram = function module() {
var x = d3.scale.ordinal(),
y = d3.scale.linear(),
xAxis = d3.svg.axis().scale(x).orient('bottom').tickSize(6, 0),
yAxis = d3.svg.axis().scale(y).orient('left').tickSize(6, 0);
function chart(selection) {
selection.each(function (data) {
// make something nice
});
}
// Expose the x-axis' tickFormat method.
d3.rebind(chart, xAxis, 'tickFormat');
// Expose the y-axis' tickFormat method.
d3.rebind(chart, yAxis, 'tickFormat');
return chart;
}
Mike Bostock mentions that
重绑定运算符允许将继承的方法(混合)反弹到另一个对象的子类。
我真的不明白怎么做,但想知道这是否是解决问题的方法?
答案 0 :(得分:1)
在这种情况下,Rebind似乎不合适,因为您可能希望为每个轴单独设置刻度格式。因此,它不是一对一的传递方案。
将它们公开为单独的属性并手动调用底层轴函数可能就是您想要的:
chart.yTickFormat = function(tickFormat) {
yAxis.tickFormat(tickFormat);
return chart;
};
chart.xTickFormat = function(tickFormat) {
xAxis.tickFormat(tickFormat);
return chart;
};
return chart;