我想在服务器端(使用Nodejs)使用“所有”的骨干,并被困在做一个适当的验证。结合异步代码和syncronous框架
问题是backbone的验证方法返回一个布尔值,验证机制应该在里面实现,但是对于节点,这些机制是异步的,因此验证方法在评估我的代码之前返回。
这里是一个很好地说明了我的设置代码示例:
Backbone.Model.extend({
validate: function(){
var result;
Jobs._withCollection(function(err, collection){
collection.count(query, function(count){
result = count > 1 ? "Job already exist" : null;
});
})
return result;
}
})
我也许能改善这个一点点,但我不知道这会工作:
function _validate(){
Jobs._withCollection(function(err, collection){
collection.count(query, function(count){
yield count > 1 ? "Job already exist" : null;
});
})
}
Backbone.Model.extend({
validate: function(){
return _validate.call(this);
}
})
尤其对于一些比较复杂的情况,例如我使用async,并且在async的最后一次回调中设置返回值(这显然是错误的,因为res在返回时为空):
Backbone.Model.extend({
validate: function(){
var res;
async.parallel([
.. do stuff ..
], function(err, results){
res = results;
})
return results;
}
})
任何想法?
对于这个以及其他许多原因,我不会使用Backbone和Node。有更好的对象模型和其他可用于Node的库,可以使用它们。 Backbone被构建为与浏览器一起工作,这与Node非常不同。 – 2012-03-20 11:47:37