Я новичок в d3 и довольно средний программист javascript. У меня есть некоторый код, чтобы создать круг, и функцию, чтобы получить й и у координаты точки на окружности:Многоразовые функции в D3
var innerCircle = svg.append('circle')
.attr({
cx: 100,
cy: 100,
r: 50,
'stroke': 'white',
'fill': 'transparent',
});
var pointOnCircle = function(circle, radians){
var cx = parseInt(circle.attr('cx'));
var cy = parseInt(circle.attr('cy'));
var r = parseInt(circle.attr('r'));
var x = cx + Math.sin(radians) * r;
var y = cy + Math.cos(radians) * r;
return {x: x, y: y};
}
Он работает. Но я чувствую, продолжая с этим подходом будет делать мой код грязный захватить мешок глобальных функций, и что я должен быть в состоянии сделать это объектно-ориентированным, так что вместо того, чтобы назвать:
var point = pointOnCircle(circle, Math.PI);
я могу вместо этого позвонить:
var point = circle.pointAt(Math.PI);
Но это повлекло бы меня либо прикрепление pointAt
функцию объекта d3 как-то, или создать свой собственный Circle
объект, который имеет pointAt
функцию, и оборачивает объект d3. Является ли это хорошей идеей?
Есть другие моменты, когда я чувствую, что хочу что-то подобное - вроде как я хочу отображать «объекты» в документы, а не простые старые данные в документы. Является ли это общим требованием, или я чего-то не понимаю концептуально?
Каков наилучший способ приблизиться к моему вопросу pointOnCircle
, который у меня выше?
Большинство примеров d3 небольшие, автономные и написаны одним сценарием. Есть ли примеры, показывающие, как создать что-то с более многоразовыми функциями?
Спасибо! Только то, что мне нужно. И затем, с точки зрения организации вашего кода, я предполагаю, что вы обычно помещаете каждую внешнюю содержащую функцию в новый .js-файл? –
Вы можете это сделать. Кроме того, если вы включаете это в большой проект, вы должны поместить свои функции в отдельное пространство имен. – ahmohamed