控制器属性中的ajax回调中的未定义属性

时间:2014-06-26 22:24:18

标签: ember.js coffeescript

我在控制器上有一个登录功能,我无法弄清楚为什么' messageClass'和'消息'当我尝试将它们设置为“失败”时,属性会变为未定义。回复邮件请求。如果我把它们带到回调之外,它们就会很好。我猜它与承诺有关,但我不知道为什么它无法访问上面定义的属性。非常感谢任何帮助。

App.UsersLoginController = Ember.ArrayController.extend
  message: ''
  messageClass: ''

  actions:
    login: ->
      email = @get 'email'
      password = @get 'password'

      url = "http://localhost:3000/api/v1/sessions/login"
      data = email: email, password: password

      request = $.post(url, data, (data)->
        console.log(data)
      ).fail((response)->
        @set 'messageClass', 'error'
        @set 'message', 'Wrong email or password'
      )

2 个答案:

答案 0 :(得分:2)

我需要参考这个'这个'来自@MatthewBlancarte之类的功能之外说:

  request = Em.$.post(url, data, (data)=>
    Em.run =>
      @set 'messageClass', 'success'
      @set 'message', 'All GOOD!'
  ).fail((response)=>
    Em.run =>
      @set 'messageClass', 'error'
      @set 'message', 'Wrong email or password'
  )

双箭头使得功能引用了这个'这个'控制器。

答案 1 :(得分:2)

您可以使用胖箭头来修复它。

(data) =>

非咖啡(我的偏好):

function (data) {
  this.doSomething(); // This function was cloned and returned with outer "this" context
}.bind(this)

或者:

var self = this;
function innerScope () {
  self.doSomething();  // outer "this" was cached as a variable.
}

希望有所帮助!