coffeescript和流星变量范围问题

时间:2015-09-18 01:36:50

标签: meteor coffeescript scope

我正在使用coffeescript和meteor,我认为我在确定范围方面存在问题。

我的应用程序绘制了一个平面图,我试图在它上面叠加一个热图(使用h337)。

@heatmap = null

initHeatMap = ( layer_name ) ->
  console.log 'creating heatmap on %s', layer_name
  h337.create
    container: document.querySelector layer_name
    gradient: 
      0.2: 'green'
      0.5: 'orange'
      0.8: 'red'
    radius: 11
    maxOpacity: 1.0
    minOpacity: 0.6
    blur: 0.6

drawHeatMap = ( metric ) ->
  @heatmap.setData
    max: 50
    min: 0
    data: regenData metric

redraw = ( metric ) ->
  console.log 'redraw: %o', @heatmap
  drawHeatMap metric 

Template.sensor_list.rendered = () ->
  @heatmap = initHeatMap '.heatmap'
  console.log 'created map: %o', @heatmap
  redraw 'temp'

基本上,我从chrome开发人员工具控制台看到的是:

creating heatmap on .heatmap
created map: Heatmap
redraw: null

为什么redraw()声称@heatmap仍然是null

1 个答案:

答案 0 :(得分:0)

coffeescript.org声明:

  • 作为this.property的快捷方式,您可以使用@property。

假设这个在coffeescript中就像是这个在javascript中,这个是函数上下文,并且对于每个函数都是不同的。您永远不会实际设置您在全局范围内创建的变量,因为它始终被对象所表示的函数上下文屏蔽。

尝试更改@heatmap(无处不在)以热图并查看是否可以解决它。