Во-первых, я использую d3.js и SVG. У меня есть этот фрагмент кода, который рисует путь:Альтернативный способ написать это?
var one = d3.select('#canvas1');
var oneCanvas = one.append("svg").attr("width", 200).attr("height", 190);
oneCanvas.append("svg:path")
.attr("d", "M100 15 A 55 55, 0, 0, 0, 73 61 A 55 55, 0, 0, 1, 127 61 A 64 64, 0, 0, 0, 100 15")
.style("stroke","black")
.style("fill", "white")
.style("stroke-width", 1)
.on("click", function(){
d3.select(this).style("fill", "magenta");
alert("You've clicked on the path in the 1st div");
});
Я использую путь около 20 раз повсюду. При таком подходе я повторяю вышеуказанный код снова и снова, как показано в https://jsfiddle.net/s26kghmq/
Причина, по которой я не использую 'd3.selectAll'
, заключается в том, что при этом я не буду устанавливать различные функции при нажатии на этот путь.
Я реализовал SVG-х 'def'
и 'use'
, но это не помогает мне тоже, потому что если я установил стиль ранее, я не могу переопределить его снова в 'use'
, как описано здесь: http://taye.me/blog/svg/a-guide-to-svg-use-elements/
Я интересно, есть ли альтернативный подход для достижения функциональности без повторения?
Заранее благодарим за все ваши ответы.
Спасибо за подробный ответ. Но что, если бы у меня были функции, определенные следующим образом: https://jsfiddle.net/s26kghmq/2/? Я редактировал код, чтобы показать результат. Это в конечном итоге приведет к дублированию, как я показал в обновленной скрипке? :) Если я не пропущу что-то ... – nicki
@nicki, см. Обновления ... – Mark
Perfect! Многому научился с этим вопросом. Спасибо! – nicki