d3.js CoffeeScript类执行上下文
我正在使用CoffeeScript类创建一个d3.js图表。我想将一个方法附加到单击事件,然后根据单击的内容运行另一个方法:d3.js CoffeeScript类执行上下文,coffeescript,d3.js,Coffeescript,D3.js,我正在使用CoffeeScript类创建一个d3.js图表。我想将一个方法附加到单击事件,然后根据单击的内容运行另一个方法: class @Chart drawChart: -> ... dataArea .enter() .append("path") .on("click", @onClick); ... onClick: -> if d3.select(this).attr("ty
class @Chart
drawChart: ->
...
dataArea
.enter()
.append("path")
.on("click", @onClick);
...
onClick: ->
if d3.select(this).attr("type") == 'video'
@runVideo(d3.select(this).attr("title"))
runVideo: ->
问题是,在onClick方法中,执行上下文(“this”)是选择,而不是图表类,因此“runVideo不是函数”。如何从onClick方法中访问选择属性并同时运行runVideo方法 您要做的是在添加click回调时以某种方式捕获
此
您在这里有几个选项:
// The Coffeescript way:
.on("click", (args...) => @onClick(args...));
// The jQuery way:
.on("click", $.proxy(@onClick, @))
// The ECMAscript5 way:
.on("click", @onClick.bind(@))
然后,您需要将您的onClick
修改为:
onClick: (evt) ->
if d3.select(evt.target).attr("type") == 'video'
@runVideo(d3.select(evt.target).attr("title"))