2014-10-02 2 views
1

После кодирования диаграммы многократного использования в Я хочу выставить метод .tickFormat() как оси X И Ось Y. Проблема в том, что они оба имеют одно и то же имя метода, поэтому мой объект гистограммы может вызывать только последний добавленный метод .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

Оператор унаследовали позволяет повторное связывание методов (mix-INS), чтобы быть отскок к подклассу на другом объекте.

Я действительно не понимаю, как это сделать, но интересно, если это способ решить мою проблему?

ответ

1

В этом случае Rebind не подходит, так как кажется вероятным, что вы хотите установить формат тика отдельно для каждой оси. Таким образом, это не сквозной сценарий 1 к 1.

Разоблачение их как отдельные свойства и вручную вызова функции, лежащей в основе оси, вероятно, что вы хотите:

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

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

return chart; 
+0

Спасибо за ваш ответ. Это на самом деле то, что я делал, но я чувствовал, что мне нужно управлять слишком большим количеством кода и надеяться, что есть более быстрый способ сделать это. Кажется, что нет, поэтому я буду отмечать это как «Ответ». Благодаря :) – ninjaPixel

Смежные вопросы