2012-05-03 2 views
4

나는 캔버스에 라파엘 요소 객체 잔뜩 있는데과 같이, 각각의 데이터를 연결 한 :Raphael.js는 element.data() 메소드로 설정된 요소의 데이터를 어디에서 저장합니까?

위의 예에서
element.data('dataVal',x); 

, 나는 X가 저장되는 위치를 알고 싶습니다. 나는 Raphael.js에 대한 소스를 통해 찾아 봤는데이 부분에 신경을 집중했다 :

elproto.data = function (key, value) { 
    var data = eldata[this.id] = eldata[this.id] || {}; 
    if (arguments.length == 1) { 
     if (R.is(key, "object")) { 
      for (var i in key) if (key[has](i)) { 
       this.data(i, key[i]); 
      } 
      return this; 
     } 
     eve("raphael.data.get." + this.id, this, data[key], key); 
     return data[key]; 
    } 
    data[key] = value; 
    eve("raphael.data.set." + this.id, this, value, key); 
    return this; 
}; 

그래서, 내 직감 'eldata'은 라파엘 용지 객체의 속성이 있다는 것이다 그 'eldata'포함 각 라파엘 엘레멘트에 대한 객체를 저장하며,이 객체에 데이터가 저장됩니다.

본질적으로 내 질문은 : 일단 Raphael 캔버스를 만들고 요소를 추가하고 해당 요소에 데이터를 추가하면 어떻게 데이터에 액세스 할 수 있습니까 (Raphael 함수를 사용하지 않고)? 나는 R.eldata (R은 Raphael canvas 임)를 찾는 것과 같은 간단한 것을 시도해 봤지만 유익하지 못했습니다.

귀하의 도움에 감사드립니다!

답변

5

eldata은 (V2.1.0에서 왼쪽 행 번호)가 폐쇄 내에 정의 a local variable이다 :이 묶여있어

233| (function() { 
....| 
254|  var loaded, 
....| 
382|   eldata = {}, 
....| 
2396|  elproto.data = function (key, value) { 
....| 
2413|  elproto.removeData = function (key) { 
....| 
3743| })(); 

때문에, 작업은 동일한 고정 내에 한정된 기능에 의해 액세스 될 수있다. 따라서 Raphael의 dataremoveData 방법을 사용하여 액세스해야합니다.

+1

엄밀히 말하면, * local * 변수입니다. –

+1

@RobW 참. 나는 단지 "비공개"가 "지역"보다 "접근하기 어려운"지점을 더 잘 만든다고 생각합니다. 여전히 업데이트되었습니다. –

+0

고마워요 조나단. 나는 비교적 새로운 자바 스크립트입니다. 내 자신의 학습을 위해, 엘파 타는 Raphael 종이 객체의 메소드 또는 요소 객체의 메소드 (또는 둘 다?)의 범위에있다. 필자의 일반적인 혼란은 eldata가 선언 된 wrapper 함수가 한 번만 실행된다는 점을 중심으로하고있다 - 그래서 모든 요소의 범위 내에서 생성 된 Raphael canvas 객체 당 하나의 eldata 인스턴스 만 존재한다. 또는 각각에 대한 eldata의 인스턴스가있다. 주어진 캔버스의 요소? 감사. –

관련 문제