单击D3饼图段时,this.set()不是函数

时间:2018-01-25 10:03:33

标签: javascript d3.js ember.js

当我点击我的饼图片段以便在我的组件中进一步使用时,我试图设置'selectedLabel'但是我遇到了'this.set()不是函数'错误,我以前没见过。

This answer表明我尝试设置属性的对象不是Ember对象,因此需要使用Ember.set(object, 'property' value)进行更改,但这会返回空错误。

我在同一组件的其他地方使用this.getthis.set methods,因此我不确定他的特定对象是否存在问题,或者我是否存在范围问题。

代码:

let g = svg.selectAll("arc")
  .data(mpie)
  .enter().append("g")
  .attr("class", "arc")

  g
  .on("mousemove", function(d) {
    var mouseVal = mouse(this);
    div
      .html("Items: " + d.data.count + "</br>" + "Date: " + d.data.label)
      .style("left", (event.pageX + 12) + "px")
      .style("top", (event.pageY - 10) + "px")
      .style("opacity", 1)
      .style("display", "block");
  })
  .on("mouseout", function() {
    div.html(" ").style("display", "none");
  })

//attempt to set 'selectedLabel' property
      .on("click", function(d) {
        this.set('selectedLabel', d.data.label)
      })

在click函数中记录'this'的控制台为我提供饼图的正确部分。

1 个答案:

答案 0 :(得分:3)

错误的背景。如果要在函数中保留上下文,请使用箭头函数,this将是外部对象。

```
g.on("click", (d)=> {
    this.set('selectedLabel', d.data.label)
})
```