【发布时间】:2014-06-05 13:57:08
【问题描述】:
如何获取结果的值(粗体)。
我正在请求处理程序。
处理程序正在调用一个函数,该函数又对服务器进行 ajax 调用。
我希望能够完成 ajax 调用并相应地返回结果。
在下面的代码中,任何错误或成功的“结果”总是错误的,因为在 ajax 调用完成之前返回 App.reqres。
如何重组我的代码?
在视图中
resetPassword: function(event) {
var ***result*** = App.reqres.request('reset_password', this.$email.val());
if(!result){
// If email is not registered
}else{
// send a link to reset password
}
},
处理程序
var API = {
reset_password: function(email, callback) {
var promise = // some ajax call to the server
var result = false;
$.when(promise).then(function(data, textStatus, jqXHR) {
result = true;
}).fail(function() {
result = false;
}).done(function(){
return result;
});
}
};
App.reqres.setHandler("reset_password", function(email) {
return API.reset_password(email);
});
一个解决方案:(有没有更好的方法??)
resetPassword: function(event) {
var message = this.$message;
**// the whole block is passed as callback**
var callback = function(result) {
if (!result) {
message.html('Email is not registered.')
message.removeClass('success');
message.addClass('error');
} else {
message.html('A reset code and reset password link has been sent to this email.')
message.removeClass('error');
message.addClass('success');
}
}
var result = App.reqres.request('reset_password', this.$email.val(), callback);
}
var API = {
reset_password: function(email, callback) {
var promise = promiseObject('resetPassword', {'email': email}, 'POST');
$.when(promise).then(function(data, textStatus, jqXHR) {
callback(true); **// pass the result in the callback function**
}).fail(function() {
callback(false); **// pass the result in the callback function**
});
}
};
App.reqres.setHandler("reset_password", function(email, callback) {
return API.reset_password(email, callback);
});
【问题讨论】:
标签: events backbone.js callback marionette