Я использую структуру dashing для создания виджета. В основном он использует скрипты Sinatra, Batman и 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
<div class="gridster">
<ul>
<li data-row="1" data-col="1" data-sizex="2" data-sizey="1">
<div
data-id="pomodoro"
data-view="Countdown"
data-title="Herp the Derp"
data-end=""
data-addclass-available='isAvailable'>
</div>
</li>
</ul>
</div>
Если функция доступа 'isAvailable' возвращает true, то применяется 'доступный' класс css, который меняет цвет div с красного на синий, как и ожидалось.
Однако, если я изменю функцию доступа с «true» на переменную, она скажет, что она не определена.
....
@accessor 'isAvailable', ->
color_available?
Судя по моим часам исследований в Google и переполнении стека, похоже, что проблема связана с областью действия.
Я безуспешно пытался изменить все экземпляры переменной color_available на глобальную область.
@color_available
Я также пытался добавить color_available в окно
window.color_available = color_available
Кто-нибудь может указать, почему color_available не определен? Я новичок в javascript/coffeescript, и я немного запутался.
Ресурсы
Как определить глобальные переменные в CoffeeScript?
https://donatstudios.com/CoffeeScript-Madness
Обновить
Я забыл упомянуть, что я пробовал следующие подходы к инициализации переменной.
startCountdown: =>
color_available
startCountdown: =>
@color_available
color_available
startCountdown: =>
color_available = null
startCountdown: =>