2012-05-03 40 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元素的對象,並且這些對象存儲數據。

從本質上說,我的問題是:一旦我已經創建了一個拉斐爾畫布,添加的元素,並添加數據到這些因素,我將如何訪問數據(不使用拉斐爾功能)?我嘗試了一些簡單的東西,比如尋找R.eldata(其中R是拉斐爾的畫布),但那並不富有成效。

您的幫助表示讚賞!

回答

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

嚴格來說,這是一個*本地*變量。 –

+1

@RobW True。我只是認爲「私人」使得「無法訪問」比「本地」更好。仍然更新。 –

+0

謝謝喬納森。我對Javascript比較陌生。對於我自己的學習,是拉斐爾紙對象的方法或只是元素對象(或兩者?)的範圍的eldata。繞點我一般的混亂是中心,在那裏eldata聲明此包裝函數只運行一次 - 這樣的話是有創造(範圍爲所有元素)eldata每拉斐爾畫布對象只有一個實例或者是有eldata的實例,每個給定畫布上的元素?謝謝。 –