Coffeescript 为什么这个变量不在coffee脚本的作用域中?
我正在使用这个框架创建一个小部件。基本上,它使用sinatra、蝙蝠侠和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
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