Проверка с backbone.js и Ruby on Rails

#ruby-on-rails #validation #backbone.js #client-side-validation

#ruby-on-rails #проверка #backbone.js #проверка на стороне клиента

Вопрос:

Есть ли у кого-нибудь какие-либо советы или примеры для выполнения проверки с backbone.js и ruby on rails 2.x или 3.x?

Комментарии:

1. Слишком расплывчато. Дайте нам больше информации

Ответ №1:

Один из подходов заключается в размещении вашей обработки ошибок в базовой модели, которую вы расширяете, назначая обработчик ошибок по умолчанию. Этот обработчик ошибок должен обрабатывать отображение ошибок как на стороне клиента, так и на сервере. Вот как может выглядеть расширение базовой модели:

 Model = Backbone.Model.extend({

  ui: Utils.UI,

  initialize: function(attributes, options) {
    options || (options = {});
    _.bindAll(this, 'defaultErrorHandler');
    this.bind("error", this.defaultErrorHandler);
    this.init amp;amp; 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);
  }

});
  

затем другие модели могут расширить и получить эту функциональность проверки. Вот модель сеанса, которая содержит проверку на стороне клиента:

 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;           
  }

});
  

Вы также могли бы обработать все это в функции validate, поскольку она вызывается перед сохранением и после сохранения, где после сохранения она может иметь дело с ошибками, которые были проанализированы из ответа сервера.

Используя описанный выше подход, вам не нужно указывать функцию ошибки при вызове функции сохранения модели. Это должно обрабатываться базовой функциональностью.

Ответ №2:

Я с большим успехом использую плагин 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"
      ]
    }
  }
});