我是新來的D3和一個漂亮的平均JavaScript程序員。我有一些代碼來創建一個圈子,一個函數來獲取一個圓上一個點的X和Y座標:D3中的可重用函數
var innerCircle = svg.append('circle')
.attr({
cx: 100,
cy: 100,
r: 50,
'stroke': 'white',
'fill': 'transparent',
});
var pointOnCircle = function(circle, radians){
var cx = parseInt(circle.attr('cx'));
var cy = parseInt(circle.attr('cy'));
var r = parseInt(circle.attr('r'));
var x = cx + Math.sin(radians) * r;
var y = cy + Math.cos(radians) * r;
return {x: x, y: y};
}
它的工作原理。但我覺得這種做法繼續將讓我的代碼的全局函數一片狼藉摸彩袋,那我應該能夠使它面向對象的,因此而不是調用:
var point = pointOnCircle(circle, Math.PI);
我可以改爲調用:
var point = circle.pointAt(Math.PI);
但是,這將涉及我或者附加pointAt
功能到D3物體以某種方式,或者創建具有pointAt
功能,幷包裝D3對象我自己Circle
對象。這是個好主意嗎?
還有其他一些問題,我覺得我想要類似的東西 - 有點像我想將「對象」映射到文檔,而不是將普通的舊數據映射到文檔。這是一個共同的要求,還是我在概念上錯過了一些東西?
什麼是最好的方式來處理我上面的pointOnCircle
問題?
大多數d3示例都是小型的,自包含的,並且用一個腳本編寫。是否有任何示例顯示如何構建具有更多可重用功能的內容?
謝謝!就是我以後的樣子。然後就組織代碼而言,我假設你通常會將每個包含外部函數放在一個新的.js文件中? – 2015-02-24 10:32:33
你可以做到這一點。另外,如果你把它放到一個大的項目中,你應該把你的函數放在單獨的名字空間中。 – ahmohamed 2015-02-24 10:35:10