2014-10-02 121 views
1

已经编码的我要揭露这两个X轴 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; 
} 

麦克博斯托克mentions that

的重新绑定操作者允许继承的方法(混合的插件)成为反弹到子类中的不同对象。

我真的不明白如何做到这一点,但不知道它是否是一种解决我的问题的方法?

回答

1

在这种情况下,重新绑定似乎不太合适,因为您似乎可能需要为每个坐标轴分别设置刻度格式。因此,这不是一对一的情况。

把它们作为单独的属性和手动调用底层轴功能可能是你想要什么:

chart.yTickFormat = function(tickFormat) { 
    yAxis.tickFormat(tickFormat); 
    return chart; 
}; 

chart.xTickFormat = function(tickFormat) { 
    xAxis.tickFormat(tickFormat); 
    return chart; 
}; 

return chart; 
+0

谢谢您的回答。这实际上是我正在做的,但我觉得我不得不管理太多的代码,并希望有一个更好的方法来做到这一点。看起来好像没有,所以我会将其标记为已回答。谢谢 :) – ninjaPixel 2014-10-21 18:12:30