我在骨干模型中的函数内部有一个ajax函数。我希望函数fetchByFBID根据返回的数据包含返回true或false。但是因为在执行回调之前我不知道数据是什么,所以我不知道如何在该函数中返回true或false。有什么提示吗?
var UserModel = Backbone.Model.extend({
urlRoot: '/API/users',
defaults: {
"fbID": "",
"firstName": "",
"lastName": "",
"gender": "",
"email": "",
"site": ""
},
fetchByFBID: function(fbID) {
var that = this;
console.log(this);
$.ajax({url: "/API/users/fbID/"+fbID, type: 'GET', success: function(data) {
if(data === "false") {
return false;
} else {
that.set(JSON.parse(data));
return true;
}
}});
}
});
要调用该函数,我只需执行:
var fbUser = new UserModel();
fbUser.fetchByFBID(response.id);
我的目标是能够做到这样的事情:
var fbUser = new UserModel();
if(fbUser.fetchByFBID(response.id))
//do something
else
//do something else
答案 0 :(得分:5)
你可以:
将回调添加为函数的参数,并以true或false异步调用
var fbUser = new UserModel();
fbUser.fetchByFBID(response.id, function (result) {
if (result) {
// do something
} else {
// do something else
}
);
这应该像
一样简单 fetchByFBID: function(fbID, callback) {
.... do your work ....
if(data === "false") {
callback.call(null,true); // or callback(true), callback.call(whatever, true), etc...
} else {
that.set(JSON.parse(data));
callback.call(null,false);
}
而不是true或false,让你的函数返回一个“promise”,这样你就可以写出一些东西
var fbUser = new UserModel();
fbUser.fetchByFBID(response.id).whenDone(function (result) {
if (result) {
// do something
} else {
// do something else
}
});
答案 1 :(得分:0)
我会添加额外的隐藏或任何div。在回调函数中,将其内容设置为“true”或“false”或您喜欢的任何其他值,并使用事件通知操作您已获得ajax答案。 这个解决方案使用了一种观察者模式。