2014-10-02 48 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