这与使用backbone的客户端或服务器端应用程序相关。我正在尝试创建一个对MongoDB或一些REST调用(取决于环境)进行唯一性检查的验证函数。这两个调用本质上都是异步的;但是,出于验证的目的,我认为我实际上需要在这里将其阻塞。如果我没有返回任何内容,那么验证函数将假定验证已通过。
我的代码目前在服务器端如下所示:
isUnique: function (key) {
var dfdFindOne = this.findOne({key: this.get(key)}),
dfd = new Deferred();
dfdFindOne.done(function (err, result) {
console.log(result);
dfd.resolve(true);
});
return dfd;
};
..。这里有些东西..。
我觉得我可以在这里做一些等待完成的功能,然后再返回……也许不是这样的。我希望backbone提供一个回调函数或什么,或者接受某种延迟类型的东西。
validate: function() {
var result = undefined;
if(!this.isUnique(key).done(function(){
result = "AHHH not unique!";
});
return result;
}
一种可能的解决方案可能是强制mongodb的本机节点客户端同步调用。我想我可以对rest调用做同样的事情。不过,这可能是一个糟糕的解决方案。
发布于 2012-09-26 22:41:16
您可以调用ajax请求并设置async:false,这样返回的结果就会有值。然而,使用async:false是邪恶的,因为可能在浏览器被锁定时出现。对于服务器端,可能并不总是有针对set async: false的变通方法
我的建议是使用您自己的验证流,而不是Backbone.validate流,因为Backbone的验证流只考虑同步验证。您可以尝试如下所示:
//Code in your Model
isUnique: function (callback) {
var dfdFindOne = this.findOne({key: this.get(key)});
dfdFindOne.done(function (err, result) {
console.log(result);
callback(result);
});
};
validate: function(callback) {
this.isUnique(callback);
}
//trying to validate before save
model.validate(function(result){
if( result == 'whatexpected'){
model.save();
}
});
https://stackoverflow.com/questions/12555747
复制相似问题