2

例如,我有一个Backbone 模型User我想在注册页面和更改设置页面中重复使用它注册页面,我有一个包含两个字段的表单email:并且password都是必需的,而在更改设置页面中还有另一种带有 emailand的表格name(但不是该password字段),第一个需要第二个不需要..

使用Backbone.Validation插件,我在验证过程中有这样的东西:

var User = Backbone.Model.extend({

  validation: {
    name: {
      rangeLength: [0, 100]
    }
    email: {
      required: true
      pattern: "email"
      rangeLength: [1, 100]
    }
    password: {
      required: true
      rangeLength: [8, 100]
    }
  } // validation

} // User

它适用于“注册”表单,但由于缺少密码,它不适用于“更改设置”表单。

有没有办法像我的情况一样在两种不同的表单上重用相同的验证?诸如验证组之类的东西,一组用于注册字段,另一组用于设置字段(我可以在其中排除密码)?..

4

1 回答 1

0

如果您使用 thedersen v0.8.2 及更高版本的主干验证器,我有一个想法。
但是它会通过引入一个标志属性来稍微污染模型,该属性用于确定您需要哪种验证。

var User = Backbone.Model.extend({


  validation: function() {
      var validationCriteria = {
        name: {
          rangeLength: [0, 100]
        }
        email: {
          required: true
          pattern: "email"
          rangeLength: [1, 100]
        }
        password: {
          required: true
          rangeLength: [8, 100]
        }
      }

      switch (this.attributes.validationMode) {
        case 'signup':
          // do nothing since we need all validation. just to demonstare, if just two modes can just simple if statement
          break;
        case 'changeSetting':
          delete validationCriteria.password;
          break;
        default:
          break;
      }

      return validationCriteria; // validation

    } // User
});

var user = new User({
    validationMode: 'signup'
  }) //when initiate the model in signup view

var user = new User({
    validationMode: 'changeSetting'
  }) //when initiate the model in change setting view
于 2015-01-08T18:04:45.027 回答