2014-03-06 51 views
0

我試圖通過使用getById()函數來獲得拉斐爾對象,但是不管我嘗試函數返回null。拉斐爾JS paper.getById()返回null

這裏是拉斐爾JS代碼,我的工作:

// Creates canvas 320 × 200 at 10, 50 
var paper = Raphael(10, 50, 320, 200); 

var circle = paper.circle(100, 100, 100); 
circle.attr({"fill": "#f00", "id": "test"}); 
circle.data("id", "test"); 

var getCircle = paper.getById("test"); 

alert(getCircle); //Returns null? 

爲什麼不paper.getById("test");回圓對象?

我已經都使用attr()data()但似乎沒有任何工作定義的ID。

的jsfiddle上面的代碼:http://jsfiddle.net/Mf9q6/

回答

2

仔細閱讀documentation

將返回元素通過其內部ID

這與元素上的id屬性不一樣。預計編號爲Paper.getById()的是Element.id

您可能想要var getCircle = paper.getById(circle.id);,它只是對circle的同一對象的引用。

Here's your fiddle, updated

+0

是啊,我現在看到這一點。我希望能夠通過定義的ID訪問對象。哦,我會找到另一個解決最初的問題:) – Axel

1

如果我理解正確你的問題,你想設置id你的元素。然後在該行的某處獲取該元素的ID。

如果是的話,那麼你就要成功了:

// Creates canvas 320 × 200 at 10, 50 
var paper = Raphael(10, 50, 320, 200); 

var circle = paper.circle(100, 100, 100); 
circle.attr({"fill": "#f00", "id": "test"}); 
circle.data("id", "test"); 

var getCircle = circle.data("id"); 

alert(getCircle); //Returns test 

編輯

如果您正試圖通過價值得到了一圈,就像你們的榜樣「測試」

paper.forEach(function (el) 
{ 
    if (el.data("id") == "test") 
     // return el - do what you want 
}); 
+0

不,我正試圖使用​​指定的ID檢索一個Rapheal對象。我知道你可以設置對象數據,但根據數據的值檢索對象實際上是問題所在。 – Axel

+0

我編輯了所以你可以得到你的圈子基於'test' – Brian

+0

感謝您的解決方案,但是我決定出於性能原因與數組/鍵映射解決方案。我不想循環遍歷整個紙張集以找到單個對象(因爲我有很多對象,並且性能會受到影響)。將對象映射到數組中的特定鍵似乎最適合我的情況。 'paperObjects ['test'] //返回測試對象' – Axel