2011-10-11 2 views
0

이전에 Raphael에서 일했지만 프로젝트로 돌아와 성능 및 일반적인 코드 품질을 향상시키기 위해 완전히 다시 작성하기로했습니다. 어쨌든, 응용 프로그램은 Raphael을 사용하여 Mind Maps을 만듭니다 (이전 질문을 읽었을 경우 전체 응용 프로그램에 대한 아이디어가 더 많을 것입니다).ZPD 플러그인에서 변수에 Raphael 객체를 저장하십시오.

그래서 paper.circle() 등을 사용하여 캔버스에 노드를 만들고 .drag()를 사용하여 불필요한 작업을 피하려면 Raphael ZPD plugin을 사용하기로 결정했습니다. 플러그인은 완전히 이해하기에는 너무 복잡 합니다만, 약간 편집하려고합니다. 변수 _ 노드에 활성 노드를 저장하고 싶습니다. 이렇게하려면 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을 변경하려고 시도) 함수되지 않습니다 : 나는의 오류 메시지가 얻을.

노드, evt.target, evt.currentTarget 등을 사용하여 많은 변형을 시도했지만, 정확한 출력을 내기 때문에 evt.target으로 바보 같은 것을 놓친 것 같습니다.

me.은 코드의 다른 곳에 정의되어 있으므로 위의 링크를 참조하십시오 (전체 플러그인을 게시하는 것보다 낫습니다).

당신이 줄 수있는 도움을 주시면 감사하겠습니다.

감사합니다.

UPDATE : 나는 그것이 내가 _node에 저장해야 evt.target 것을 지금 100 % 확신하지만 SVG, DOM과 라파엘 사이에 직접 연결이없는 것으로 보인다. SVG 요소를 어떻게 Raphael에 연결할 수 있을지에 대한 아이디어가 있습니까?

답변

1

지난 주에이 플러그인을 사용하기 시작했고 같은 문제가 발생했습니다.

SVG 모양을 다시 모양에 대한 래퍼 핸들에 연결할 수 있습니다.

기본적으로 zpd 플러그인 객체에 연결된 래퍼 종이 객체에 대한 포인터를 유지해야합니다. var opts = {... 뒤에 raphPaper 선언을 작성하여이 작업을 수행합니다.} line

var raphPaper = null; 

raphPaper 객체는 opts 객체처럼 사용할 수 있습니다.

raphael이 도형을 만들면 두 개의 변수 (내가 찾은 변수)가 할당됩니다. .raphael 및 .raphaelid .raphael은 SVG 모양이 raphael에 의해 만들어 졌는지 여부를 알려주는 부울이며 .raphaelid는 SVG 모양의 내부 ID입니다. 따라서, 래퍼 요소를 얻으려면 종이 객체 (raphPaper)에 getById를 사용하면됩니다.

if(evt.target.raphael){ 
    var raphShp = raphPaper.getById(evt.target.raphaelid); 
} 

문제 때문에 raphShp를 _node 또는 액세스하려는 변수에 지정하면됩니다.

관련 문제