我有一个使用d3创建的元素如下:
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 :(得分:1)
一个选项是返回一个函数,该函数在对原始函数的另一个引用时关闭:
on_click: do ->
self = this
return (d,i) ->
matrix = this.getScreenCTM()
self.popup.show(params)
这样,当事件处理程序调用该函数时,this
是DOM元素,self
引用原始this
对象。当然,这个解决方案意味着你失去了速记@
符号。