Javascript 主干仅在save中验证单个属性

Javascript 主干仅在save中验证单个属性,javascript,validation,backbone.js,backbone-model,Javascript,Validation,Backbone.js,Backbone Model,我有一个模型有两个属性。让我先解释一下 Backbone.Model.extend({ validation: { username: [ {required: true, msg: 'Enter email/username.'}, ], password: [ {required: true,msg: 'Enter password.'},

我有一个模型有两个属性。让我先解释一下

Backbone.Model.extend({
    validation: {
            username: [
               {required: true, msg: 'Enter email/username.'},
            ],   
            password: [
               {required: true,msg: 'Enter password.'}, 
               {minLength:20,msg: 'Incorrect password length.'}]
        },
}); 
我想在保存函数中验证单个属性。你知道吗? 也就是说,如果我的用户名和密码字段为空,则仅对用户名发生错误

我用的是脊梁骨


谢谢

您可以使用两种方法:

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

什么在什么时候得到验证

如果您使用的是主干网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.'}]
        },
}); 

我很确定这就是原因,尽管我不确定答案中的语法是否正确。

您可以使用两种方法:

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

什么在什么时候得到验证

如果您使用的是主干网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.'}]
        },
}); 

我很确定这就是原因,尽管我不确定答案中的语法是否正确。

要使用主干验证单个或多个属性。验证,请使用以下代码:

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

要使用主干验证单个或多个属性,请使用以下代码:

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

谢谢@jonnybot,我们能做到。但我认为这不是一个合适的解决方案,应该有一些选择。谢谢@jonnybot,我们可以做到。但我认为这不是一个合适的解决方案,应该有一些选择。