对象上的函数内的Ember coffeescript @是窗口而不是对象

时间:2014-07-29 20:29:42

标签: ember.js coffeescript scope this

我似乎无法引用属性上定义的函数内部的父项。

SocketMixin = Ember.Mixin.create

  thing: (->
    'dougs'
  ).property()

  getThing: ->
    console.log @ # window object
    @get('thing') # Uncaught TypeError: undefined is not a function 

  sameWithFatArrow: =>
    console.log @ # window object
    @get('thing') # Uncaught TypeError: undefined is not a function 

  printThing: ->
    @get('getThing')() # call the above function

计算属性没有问题

  thingProp: (->
    @get('thing')
  ).property()

工作正常。

我一直试图通过在params中传递@来解决问题,但我非常确定必须有一种更好的方法来调用这些函数。

  getThing: (self) ->
    console.log @ # window object
    self.get('thing') # Uncaught TypeError: undefined is not a function 

  printThing: ->
    @get('getThing')(@) # call the above function

真的,我想做的就是调用一个方法。它应该比所有这一切更加紧张!?!?

1 个答案:

答案 0 :(得分:2)

您正在窗口范围内调用该函数。不要使用getter,只需调用func即可。只有在处理属性时才需要getter和setter。函数仍然以相同的方式调用。

printThing: ->
    @getThing() # call the above function