backbone仅在保存时验证单个属性

时间:2013-11-27 14:16:23

标签: javascript validation backbone.js backbone-model

我有一个有2个属性的模型。我先解释一下。

Backbone.Model.extend({
    validation: {
            username: [
               {required: true, msg: 'Enter email/username.'},
            ],   
            password: [
               {required: true,msg: 'Enter password.'}, 
               {minLength:20,msg: 'Incorrect password length.'}]
        },
}); 

我想在保存功能中验证单个属性。你有什么主意吗? 意思是,如果我的用户名和&密码字段为空,则只应出现用户名错误。

我正在使用backbone.validation主干。

由于

3 个答案:

答案 0 :(得分:3)

要使用Backbone.Validation验证单个或多个属性,请使用以下代码:

yourModel.isValid('username') // or
yourModel.isValid([ 'attribute1', 'attribute2' ])

答案 1 :(得分:1)

您可以使用两种方法:

方法1

我认为最简单的方法是在验证用户名之前不要设置密码字段。引用FAQ

  

什么时候得到验证?

     

如果您使用的是Backbone v0.9.1或更高版本,则将验证模型中的所有属性。但是,如果从未设置过名称(显式或默认值),则在设置之前不会验证该属性。

     

在填充表单时验证表单时非常有用,因为您不想提醒用户输入尚未输入的错误。

     

如果您需要验证整个模型(两个属性是否已设置),您可以在模型上调用validate()或isValid(true)。

所以,不要在整个模型上调用validate。首先在用户名字段中调用它,然后在密码字段中调用它。

此外,在验证用户名之前,请不要在模型中设置密码字段。

方法2

另一种方法是使用FAQ中描述的条件验证:

  

您是否支持条件验证?

     

是的,好吧,有点儿。您可以通过将所需的验证程序指定为函数来进行条件验证。

因此,您的代码可能类似于:

Backbone.Model.extend({
    validation: {
            username: [
               {required: true, msg: 'Enter email/username.'},
            ],   
            password: [
               {required: function(val, attr, username) {
                   return Bool(username); //some code here- return true if username is set, false if it is not. This rough example may not work in the real world.
               },msg: 'Enter password.'}, 
               {minLength:20,msg: 'Incorrect password length.'}]
        },
}); 

我很确定这是Ulugbek Komilovich is suggesting,但我不确定答案中的语法是否正确。

答案 2 :(得分:0)

M = Backbone.Model.extend({
    validation: {
      username: [
        {required: true, msg: 'Enter email/username.'},
      ],   
      password: function(value, attr, computedState) {
        // new M(this.get('username')); //or use second way
        if(this.get('username')) {
          return 'Enter email/username.';
        }
        // other checks
      }
    },
});