骨干验证问题

时间:2013-10-17 10:48:50

标签: jquery backbone.js

我正在尝试使用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标记为每个相对输入旁边的淡入淡出。

1 个答案:

答案 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;
}