无法让Meteor.setInterval在方法中工作

时间:2014-11-29 00:47:13

标签: methods timer meteor coffeescript

我正在尝试使用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."

1 个答案:

答案 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."