Ранее я работал с Рафаэлем, но вернулся к своему проекту и решил полностью переписать его, чтобы улучшить производительность и общее качество кода. В любом случае, приложение использует Рафаэля для создания Mind Maps (если вы читали мои предыдущие вопросы, у вас будет больше представления об общем приложении).
Поэтому я создаю узлы на холсте, используя paper.circle () и т. Д., И чтобы избежать ненужной работы с помощью .drag (), я решил использовать плагин Raphael ZPD . Плагин слишком сложен для меня, чтобы понять его полностью, но я собираюсь немного его отредактировать. Я хотел бы сохранить активный узел в переменной _node. Для этого я думал, что это будет так же просто, как получить evt.target
и присвоить его, но, очевидно, это не так.
Вот часть плагина (бит, где я думаю, что назначение должно идти):
/**
* Handle mouse button release event.
*/
me.handleMouseUp = function(evt) {
if (evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
if ((me.state == 'pan' && me.opts.pan) || (me.state == 'move' && me.opts.drag)) {
// Quit pan mode
me.state = '';
}
};
При использовании alert(evt.target);
(при нажатии на кружок) мне дается:
[объект SVGCircleElement]
, что означает, что evt.target
получает отдельный элемент (как он изменяется для других фигур), но затем пытается манипулировать _node
после неудачного присвоения. Я получаю сообщение об ошибке:
_node.attr не является функцией
(я попытался изменить attr (), так как это была самая простая функция).
Я перепробовал много вариантов, используя node, evt.target, evt.currentTarget и т. Д., Но я уверен, что мне просто не хватает чего-то глупого с evt.target
, потому что он выдает правильный вывод при предупреждении.
Я понимаю, что me.
определяется в другом месте кода, поэтому, если вам нужно, просмотрите ссылку выше (кажется, лучше, чем публиковать полный плагин здесь).
Буду признателен за любую помощь, которую вы можете оказать.
Спасибо.
ОБНОВЛЕНИЕ: Теперь я на 100% уверен, что я должен хранить evt.target
в _node
, но может показаться, что нет прямой связи между SVG, DOM и Raphael. Любые идеи о том, как я мог бы связать элемент SVG обратно с Рафаэлем?