我在控制器上有一个登录功能,我无法弄清楚为什么' 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'
)
答案 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.
}
希望有所帮助!