Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coffeescript 为什么这个变量不在coffee脚本的作用域中?_Coffeescript_Dashing - Fatal编程技术网

Coffeescript 为什么这个变量不在coffee脚本的作用域中?

Coffeescript 为什么这个变量不在coffee脚本的作用域中?,coffeescript,dashing,Coffeescript,Dashing,我正在使用这个框架创建一个小部件。基本上,它使用sinatra、蝙蝠侠和coffee脚本来创建仪表板 我的代码基于 我有以下代码 咖啡剧本 class Dashing.Countdown extends Dashing.Widget ready: -> setInterval(@startCountdown, 500) startCountdown: => color_available current_timestamp = Math.ro

我正在使用这个框架创建一个小部件。基本上,它使用sinatra、蝙蝠侠和coffee脚本来创建仪表板

我的代码基于

我有以下代码

咖啡剧本

class Dashing.Countdown extends Dashing.Widget


  ready: ->
    setInterval(@startCountdown, 500)

  startCountdown: =>
    color_available
    current_timestamp   = Math.round(new Date().getTime()/1000)
    end_timestamp       = Math.round( Date.parse($(@node).find(".more-info").html())/1000 )
    seconds_until_end   = end_timestamp - current_timestamp


    if @get('title') > 'Busy'
      # @set('title', 'herpin the derpin')
      color_available = true
    else
      color_available = false

    ...truncated for readability

  @accessor 'isAvailable', ->
    true
html

从我数小时对google和stack overflow的研究来看,这个问题似乎是一个范围问题

我尝试将color_可用变量的每个实例都更改为全局范围,但没有成功

@color_available
我还尝试为窗口添加可用的颜色

window.color_available = color_available
有人能指出为什么可用的颜色是未定义的吗?我是javascript/coffeescript的新手,我有点不知所措


资源


更新

我忘了提到,我尝试了以下方法来初始化变量

startCountdown: =>
  color_available

startCountdown: =>
  @color_available

color_available
startCountdown: =>

color_available = null
startCountdown: =>

使用
@accessor
就是将它放在原型对象上,这样它就会被共享。当然,如果你将它添加到类的每个实例中,你可能不希望它在类的每个实例中都是相同的。我猜蝙蝠侠是在为你添加它作为一个实例方法,所以你应该能够将它设置在什么地方无论这样做是否合理:

myInstance = new Dashing.Countdown()
myInstance.isAvailable() #=> true
myInstance.isAvailable = -> false
myInstance.isAvailable() #=> false
也许?我会试试。FWIW,你可以在纯咖啡脚本中很容易地做到这一点,而不用使用
@accessor
之类的东西

class Dashing.Countdown extends Dashing.Widget
  constructor: ({@colorAvailable})->
    @colorAvailable ?= -> false

  isAvailable: @colorAvailable


myInstance = new Dashing.Countdown(colorAvailable: -> true)
myInstance.isAvailable() #=> true
myInstance = new Dashing.Countdown()
myInstance.isAvailable() #=> false
myInstance = new Dashing.Countdown()
myInstance.isAvailable() #=> true
myInstance.isAvailable = -> false
myInstance.isAvailable() #=> false
class Dashing.Countdown extends Dashing.Widget
  constructor: ({@colorAvailable})->
    @colorAvailable ?= -> false

  isAvailable: @colorAvailable


myInstance = new Dashing.Countdown(colorAvailable: -> true)
myInstance.isAvailable() #=> true
myInstance = new Dashing.Countdown()
myInstance.isAvailable() #=> false