javascript – CoffeeScript中的Backbone.js setTimeout()循环

似乎我尝试这种方式,它会引发某种错误.这是我的代码现在的样子:

runShow: ->
  moments = @model.get('moment_stack_items')
  if inc == moments.length
    inc = 1
    pre = 0
  $("#" + moments[pre].uid).hide("slide", { direction: "left" }, 1000)
  $("#" + moments[inc].uid).show("slide", { direction: "right" }, 1000)

  inc += 1
  pre += 1

  console.log "looping" + inc
  t = setTimeout(this.runShow(),2000);

我在我的活动中调用了这个函数.
我在Backbone.View之外定义了inc = 1和pre = 0 ..我当前的错误是“Uncaught TypeError:Object [object DOMWindow]没有方法’runShow’”
奖励积分:我怎样才能从另一个函数中引用t(运行我的clearTimeout(t))?

解决方法:

您要求setTimeout函数评估“this.runShow()”,并且setTimeout将在窗口的上下文中执行此操作.这意味着在评估此代码时,这是窗口对象.

为了避免这种情况,您可以创建一个函数并将其绑定到当前上下文,以便每次调用该函数时,这与创建函数时相同.

在咖啡脚本中,您可以使用=>执行此操作:

func = =>
    this.runShow()

setTimeout(func, 2000)

或者在一行上:

setTimeout((=> this.runShow()), 2000)

how can I reference t from another function?

创建对象的属性:

class Something
    t: null
    runShow: ->
       ...
       this.t = ...
    otherFunction: ->
       t = this.t
上一篇:javascript – getFullYear在一年的第一天返回年份


下一篇:javascript – 在CoffeeScript中尝试在类中调用方法(@_methodName)时,它返回undefined