我有这个饼图,可以正确显示正确的数据:

  # setup the pieChart
  if ($( "#pieChart" ).length)
    poll_labels = []
    poll_data = []
    poll_colors = []
    $('.option_text').each (i, obj) ->
      poll_labels.push($( obj ).text())
      return
    $('.nb_votes').each (i, obj) ->
      poll_data.push($( obj ).text())
      poll_colors.push('#' + Math.floor(Math.random() * 16777215).toString(16))
      return
    data =
      labels: poll_labels
      datasets: [ {
        data: poll_data
        backgroundColor: poll_colors
        hoverBackgroundColor: poll_colors
      } ]

    ctx = document.getElementById('pieChart')
    pollPieChart = new Chart(ctx,
      type: 'pie'
      data: data
      animation: animateRotate:true)

    $('#pieChart').on 'data:update', (event, data_id, data) ->
      $('.answer_option').each (i, obj) ->
        if($( obj ).attr('id') == ("option_" + data_id))
          this.pollPieChart.data.datasets[0].data[i] = data
      this.pollPieChart.update()


但是,data:update事件无法找到pollPieChart变量进行更新吗?
它不在window.pollPieChart中,我无法在pollPieChart下找到它。新变量之后是否“消失”了?

最佳答案

pollPieChart是局部变量,而不是事件的this上下文上的属性。

'data:update'事件侦听器内部,js自动将this设置为发生事件的元素(document.getElementById(''))。

只需从回调中this.之前的pollPieChart删除即可解决它,因为它是在current closure而不是全局window对象中定义的。

要将其放置在全局窗口中(尽管此处没有必要),请使用

window.pollPieChart = new Chart(ctx,
  type: 'pie'
  data: data
  animation: animateRotate:true)

09-29 20:31