Я пытаюсь использовать магистраль для «всего» на стороне сервера (с Nodejs), и застрял при выполнении правильной проверки.
Проблема заключается в том, что метод validate в backbone возвращает логическое значение, и внутри него должна быть реализована механика проверки, но с узлом эта механика является асинхронной, поэтому метод 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 равно нулю при возврате):
Backbone.Model.extend({
validate: function(){
var res;
async.parallel([
.. do stuff ..
], function(err, results){
res = results;
})
return results;
}
})
Есть идеи?