2013-04-08 56 views
0

一個D3回調我有使用D3如下創建一個元素:這和_this在CoffeeScript的

redraw:()-> 
    # 
    points = d3.select(".point").data(the_data) 
    points.enter().append("g").classed("point").on("click", @on_click) 


on_click:(d,i)-> 
    matrix = this.getScreenCTM() 
    # do some stuff 
    @popup.show(params) 

popup是具有方法show()一個成員對象。

問題是,在on_click()回調我需要這是DOM對象和實例,所以我可以引用數據成員popup

我應該怎麼辦?

+0

所以你需要一個變量一次成爲兩個不同的東西?您是否嘗試過使用'd3.select(this)'獲取元素? – 2013-04-08 10:04:57

+0

@LarsKotthoff我需要解決歧義。我需要一種方法來獲取與調用回調函數相關的DOM元素,並且我需要訪問成員對象。 – Dan 2013-04-08 10:09:57

回答

1

一種選擇是,以返回在另一個參考關閉原來的一個功能是:

on_click: do -> 
    self = this 
    return (d,i) -> 
    matrix = this.getScreenCTM() 
    self.popup.show(params) 

當函數由事件處理函數調用這樣一來,this是DOM元素,self指的是原來的this對象。當然,這個解決方案意味着你失去了速記@表示法。

+0

這似乎是正確的,但由於某種原因,我需要on_click:() - >而不是。有任何想法嗎? – rainkinz 2013-12-27 16:41:53