2014-06-18 6 views
1

Мне было интересно, можно ли использовать функции в функциях d3.js. Чтобы прояснить мой вопрос, давайте предположим, что у вас есть colorscaled3.js с использованием функций в специальных функциях d3.js

var colorScale = d3.scale.quantile() 
       .domain([0,8]) 
       .range(["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]); 

Есть ли способ, чтобы сделать следующую работу?

 var colorScale = d3.scale.quantile() 
      .domain([0,8]) 
      .range(function(){return ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]}); 

так возвращающий весь аргумент из функции?

большое спасибо всем, кто знает!

+0

Вы не в состоянии прояснить свои цели? В примере, который вы дали, имеет смысл просто использовать вашу собственную функцию напрямую вместо шкалы D3. – explunit

+0

На этот вопрос ответил [Документация API] (https://github.com/mbostock/d3/wiki/Quantitative-Scales #quantile_range). –

ответ

2

Спасибо Explunit, Ларс и Томас

Я нашел адекватный ответ на мой вопрос, хотя.

Ответ: Да, это возможно, а вот как, если вы знаете, что аргумент вашего диапазона будет функция:

var myfunction = function() 
     {return ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]} 

     var colorScale = d3.scale.quantile() 
       .domain([0,8]) 
       .range(myfunction()); 

Однако, если вы не уверены. вы можете использовать d3.functor(), который будет работать, даже если вы передадите ему значение, а не функцию. Так как это (если это функция):

var myfunction = function() 
     {return ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]} 

     var myfunctionWrapped = d3.functor(myfunction); 

     var colorScale = d3.scale.quantile() 
       .domain([0,8]) 
       .range(myfunctionWrapped()); 

И как это, если это значение (или массив):

var myfunction = ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"] 

var myfunctionWrapped = d3.functor(myfunction); 

var colorScale = d3.scale.quantile() 
     .domain([0,8]) 
     .range(myfunctionWrapped()); 

Поэтому я рекомендовал бы использовать в d3.functor(), так как делает ваш код более универсальным.

1

Не с диапазонами. Хотя многие другие методы d3 позволяют выполнять функции в качестве параметров. Обычно это методы, которые могут возвращать разные значения на основе конкретной привязки.

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