6

rails 2.xまたは3.xでbackbone.jsとrubyを使用して検証を行うためのアドバイスや例はありますか?

4

2 に答える 2

12

1つのアプローチは、デフォルトのエラーハンドラーを割り当てることによって拡張する基本モデルでエラー処理を見つけることです。このエラーハンドラは、クライアント側とサーバーの両方のエラー表示を処理する必要があります。基本モデルの拡張機能は次のようになります。

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

});

その後、他のモデルを拡張して、この検証機能を取得できます。クライアント側の検証を含むセッションモデルは次のとおりです。

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

});

保存前と保存後に呼び出されるため、検証関数ですべてを処理することもできます。保存後は、サーバーの応答から解析されたエラーを処理する可能性があります。

上記のアプローチを使用すると、モデルの保存関数を呼び出すときにエラー関数を指定する必要はありません。基本機能で処理する必要があります。

于 2011-06-10T13:11:11.413 に答える
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"
      ]
    }
  }
});
于 2011-11-21T14:31:24.820 に答える