我正在尝试使用Meteor.setInterval来创建一个简单的倒数计时器(一次1秒)。我在模板中使用了所有点击事件(由console.log验证)。它们触发方法,我还通过终端中的console.log事件验证工作。
我想: - 在#start点击时启动倒数计时器,使用Meteor.setInterval,间隔为1000毫秒。 - 通过将现有intervalId更改为0的间隔,暂停#pause单击时的计时器。 - 使用Meteor.clearInterval(id)取消#cancel点击的计时器。
我想把每一个都放在我的方法中,但它似乎不起作用。我似乎无法获得intervalId并且可用于其他方法。我也不确定在哪里放置我的间隔功能。
我已经包含了我的代码而没有包含Meteor.setInterval或Meteor.clearInterval,因为我不知道他们应该去哪里。
咖啡代码:
if Meteor.isClient
Meteor.startup () ->
console.log "Client is Alive"
Session.setDefault("timerStartValue", 25)
Session.setDefault("timeRemaining", 25)
Template.timer.helpers
timeRemaining: () ->
Session.get("timeRemaining")
timerStartValue: () ->
Session.get("timerStartValue")
Template.timer.events
"click #start": () ->
console.log "Start button clicked."
Meteor.call("start", (error, result) ->
if error then console.log "Error is #{error}.")
"click #pause": () ->
console.log "Pause button clicked."
Meteor.call("pause", (error, result) ->
if error then console.log "Error is #{error}.")
"click #cancel": () ->
console.log "Cancel button clicked."
Meteor.call("cancel", (error, result) ->
if error then console.log "Error is #{error}.")
if Meteor.isServer
Meteor.startup () ->
console.log "Server is alive."
Meteor.methods
start: () ->
console.log "started on server."
pause: () ->
console.log "paused on server."
cancel: () ->
console.log "cancelled on server."
答案 0 :(得分:1)
我决定在方法之外构建它,将所有代码保存在客户端上。似乎工作正常。我在这里包含了代码,以防其他人发现它有用。
if Meteor.isClient
Meteor.startup () ->
console.log "Client is Alive"
Session.setDefault("timerStartValue", 25)
Session.setDefault("timeRemaining", 25)
Session.setDefault("intervalId", 0)
Template.timer.helpers
timeRemaining: () ->
Session.get("timeRemaining")
timerStartValue: () ->
Session.get("timerStartValue")
Template.timer.events
"click #start": () ->
countDown = () ->
t = Session.get("timeRemaining")
if t > 0
Session.set("timeRemaining", t - 1)
else
0
intervalId = Meteor.setInterval(countDown, 1000)
Session.set("intervalId", intervalId)
console.log "Start button clicked."
"click #pause": () ->
Meteor.clearInterval(Session.get("intervalId"))
console.log "Pause button clicked."
"click #cancel": () ->
Meteor.clearInterval(Session.get("intervalId"))
Session.set("timeRemaining", Session.get("timerStartValue"))
console.log "Cancel button clicked."