使用backbone.js和Ruby on Rails进行验证

Vin*_*nce 6 validation ruby-on-rails client-side-validation backbone.js

有没有人对rails 2.x或3.x上的backbone.js和ruby进行验证有什么建议或示例?

Bil*_*uer 12

一种方法是通过分配默认错误处理程序在您扩展的基本模型中定位错误处理.此错误处理程序应处理客户端和服务器错误显示.以下是基本模型扩展的外观:

Model = Backbone.Model.extend({

  ui: Utils.UI,

  initialize: function(attributes, options) {
    options || (options = {});
    _.bindAll(this, 'defaultErrorHandler');
    this.bind("error", this.defaultErrorHandler);
    this.init && this.init(attributes, options);
  },

  // Gets call for failures in validate and for server failures.
  defaultErrorHandler: function(model, error) {
    var errors;
    if (_.isArray(error)) {
      errors = error.join('<br/>');
    } else {
      // Server error; parse as needed into a displayable error.
    }
    this.ui.showError(errors);
  }

});
Run Code Online (Sandbox Code Playgroud)

然后其他模型可以扩展并获得此验证功能.这是一个包含客户端验证的Session模型:

Session = Model.extend({

  validate: function(attrs) {       
    var errors = []
    if (_.isEmpty(attrs.email)) {
      errors.push("Email can't be blank");
    }
    if (_.isEmpty(attrs.password)) {
      errors.push("Password can't be blank");
    }   
    return _.any(errors) ? errors : null;           
  }

});
Run Code Online (Sandbox Code Playgroud)

你也可以在validate函数中处理它,因为它在保存之前和保存之后被调用,在保存之后它可能正在处理已经从服务器响应中解析出的错误.

使用上述方法,在调用模型的保存功能时无需指定错误功能.它应该由基本功能处理.


Dav*_*ite 9

我一直在使用Backbone.validations插件取得了巨大的成功.它允许您像在Rails模型中一样定义验证.

var ValidatingModel = Backbone.Model.extend({
  validate : {
    name : {
      required  : true,
      pattern   : /[a-zA-Z]+/,
      minlength : 3,
      maxlength : 100
    },
    age : {
      type: "number",
      min: 0,
      max: 200
    },
    email : {
      type: "email"
    },
    homepage : {
      type: "url"
    },
    occupation : {
      in : [
        "Lawyer",
        "Doctor",
        "Professor",
        "Economist"
      ]
    }
  }
});
Run Code Online (Sandbox Code Playgroud)