【发布时间】:2012-03-20 21:55:46
【问题描述】:
我正在尝试将骨干用于服务器端的“一切”(使用 Nodejs),但无法进行正确的验证。
问题是主干的 validate 方法返回一个布尔值,并且应该在其中实现验证机制,但是对于 node,这些机制是异步的,因此 validate 方法在评估我的代码之前返回。
这是一个代码示例,很好地说明了我的设置:
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 在返回时为 null):
Backbone.Model.extend({
validate: function(){
var res;
async.parallel([
.. do stuff ..
], function(err, results){
res = results;
})
return results;
}
})
有什么想法吗?
【问题讨论】:
-
出于这个和许多其他原因,我不会将 Backbone 与 Node 一起使用。有更好的对象模型和其他可用于 Node 的库,它们是为使用它而构建的。 Backbone 是为与浏览器一起工作而构建的,这是一个与 Node 非常不同的环境。
标签: node.js asynchronous backbone.js