Пример «фиксированной длины» хорошо работает.d3.js динамически создает функции кисти
я в настоящее время есть массив щеток (который я использую для гистограмм), для которых я определить в массиве:
вар brushFunctionArray = [brush0, brush1, brush2];
Я иду через петлю гистограммы для создания гистограмм и для каждой кисти я использую:
var brush = d3.svg.brush()
.x(x)
.on("brush", brushFunctionArray[i]);
И я определяю кисти, как так:
function brush0() {brushmove(0);}
function brush1() {brushmove(1);}
function brush2() {brushmove(2);}
Тогда есть одно определение brushmove:
function brushmove(index){
...
...
}
Это прекрасно работает. НО, я хочу иметь возможность заставить массив во время выполнения двигаться дальше фиксированной длины (brush0 ... brushB). Я пытался создать функции динамически:
var brushFunctionArray = [];
for (var i = 0; i < numOfHistograms; i++){
var func = new Function("return function brush" + i + " () {brushmove("+i+");}")();
brushFunctionArray.push(func);
}
Это создает функцию и вставляет их в массив, но я не могу достаточно использовать brushFunctionArray в .on («кисть», ..), как и раньше, потому что функции там, а не имена функций. Плюс, когда я помещаю функции в массив, я больше не инициализирую их.
Спасибо за любые предложения!
Если вы используете анонимную функцию, вы получите сообщение об ошибке при попытке переместить любой из кистей: неперехваченным TypeError: Не удается вызвать метод «степень» неопределенных Вы должны каким-то образом имеют имена функций в там brush0, brush1, ... – SOUser
Работает отлично для меня - http://jsfiddle.net/Es3jx/ У вас есть полный пример где-нибудь? –