我正在尝试使用Backbone验证一些简单的输入字段:
var User = Backbone.Model.extend({
validate: function(attr, options){
if(attr.age < 18){
return 'too young';
}
if(attr.firstname === ''){
return 'name required';
}
},
urlRoot: '/users'
});
在视图中我传递{validate:true}和用户:无效我控制台.log从模型中继承验证函数的错误。
var EditUser = Backbone.View.extend({
el:'.page',
render: function(options){
var that = this;
if(options.id){
that.user = new User({id: options.id});
that.user.fetch({
success: function(user){
var template = _.template($('#edit-user-template').html(), {user:user});
that.$el.html(template);
}
});
} else{
var template = _.template($('#edit-user-template').html(), {user:null});
this.$el.html(template);
}
},
events: {
'submit .edit-user-form': 'saveUser',
'click .delete': 'deleteUser'
},
saveUser: function (ev){
var userDeatils = $(ev.currentTarget).serializeObject();
var user = new User({validate:true});
user.on("invalid", function(model, error) {
console.log(error);
});
user.save(userDeatils,{
success: function(user){
router.navigate('', {trigger:true});
}
})
return false;
},
deleteUser: function(ev){
this.user.destroy({
success: function(){
router.navigate('', {trigger:true});
}
});
return false;
}
});
所有我进入console.log的第一个错误是“太年轻”但不是第二个“需要的名字”。我希望每个单独的错误返回填充span标记为每个相对输入旁边的淡入淡出。
答案 0 :(得分:1)
从未使用过验证功能,但如果假设失败,请查看实现,而不应立即return
。
如果我遇到这个问题,我会更改验证功能,将错误累积到数组中,而不是立即返回:
validate: function(attr, options){
var errors = []
if(attr.age < 18){
errors.push('too young');
}
if(attr.firstname === ''){
errors.push('name required');
}
return errors;
}