2013-04-20 71 views
0

訪問變量/參數傳遞給回調這可能是一個JS的問題,或許比D3的問題更如何獲得與D3

我有一個單頁上幾個D3可視化,都正在從打造相同的代碼。爲了擁有某種名稱空間,我創建了一個類(在JS中是一個函數),我實例化了這個類。像下面這樣:

function AlmViz(params) { 
    ... 
    this.svg = this.chartDiv.append("svg") 
     .attr("width", this.width + this.margin.left + this.margin.right) 
     .attr("height", this.height + this.margin.top + this.margin.bottom) 
     .append("g") 
     .attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")"); 
     ... 
} 

function loadData(viz) { 
    ... 
    viz.svg.selectAll(".bar") 
     .data(level_data) 
     .enter().append("rect") 
      ... 
    ... 
} 

// I loop here and call this several times 
// with different paramters, so I get a bunch of 
// different graphs 
var viz = new AlmViz(params); 
loadData(viz); 

chartDiv.svg.append("a") 
    .attr("href", "#") 
    .text("to change click here") 
    .on("click", change); 

我現在想添加一些轉變,這要求使用。對的(「點擊」,變更)。但是,在所有D3範例中,更改函數都依賴於訪問當前範圍內的變量。如何訪問與特定實例一起使用的圖表對應的AlmViz實例?

注意:這已經發布在d3 Google小組上,但它似乎沒有得到太多關注,所以我原本以爲我會回到STO。原帖是在這裏: https://groups.google.com/forum/?fromgroups=#!topic/d3-js/1o4mYnMJZTA

+0

您可以將所有的情況下,保存在一個數組/對象。 – 2013-04-20 21:08:00

+0

是的,我想到了這一點,但我仍然不知道如何通過onChange回調 – pocketfullofcheese 2013-04-20 21:10:00

+0

傳遞實例(或數組鍵),我唯一的想法是使用鏈接中的屬性(例如,一個id在)並將其用作數組鍵。它似乎不是正確的方法,但也許它的權利? – pocketfullofcheese 2013-04-20 21:11:16

回答

2

您可以通過當前的狀態作爲參數傳遞給你的變化功能如下:

.on("click", function() { change(viz); });