0

我正在尝试使用 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} 和用户:无效我 console.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 中得到的只是第一个错误“太年轻”,而不是第二个“需要名称”。我希望每个返回的单个错误都填充一个跨度标签,使其成为每个相关输入旁边的淡入淡出。

4

1 回答 1

1

return从未使用过验证功能,但如果假设失败,则不应立即查看实现。

如果我遇到这个问题,我会更改 validate 函数以将错误累积到一个数组中,而不是立即返回它们:

validate: function(attr, options){
    var errors = []
    if(attr.age < 18){
        errors.push('too young');
    }
    if(attr.firstname === ''){
        errors.push('name required');
    }
    return errors;
}
于 2013-10-17T11:21:25.360 回答