2

バックボーン フォームバックボーン バリデーションを使用してフォームで一度に 1 つのフィールドをバリデーションできるようにしたいのですが、スキーマではなくモデルのバリデーションに要件を入れると、これを機能させるのに問題が生じます。

私のモデルは次のとおりです。

class Event extends Backbone.Model
  url: ->
    '/events' + (if @isNew() then '' else '/' + @id)

  validation:
    title:
      required: true
    start_date:
      required: true
    end_date:
      required: true

  schema: ->
    title:
      type: "Text"
    start_date:
      type: "DateTime"
      title: "Start Date"
      DateEditor: "DatePicker"
    end_date:
      type: "DateTime"
      title: "End Date"
      DateEditor: "DatePicker"

これらを使用する私のビューのコードは

class Events extends Backbone.View
  ...
  initialize: ->
    @form = new Backbone.Form(model: @model).render()
    Backbone.Validation.bind @form;

  validateField: (field) ->
    @form.on "#{field}:change", (form, fieldEditor) =>
      @form.fields[field].validate()

  render: ->
    ...
    @validateField for field of @form.fields
    ...

required: trueただし、私の問題は、次のようにスキーマに移動した場合にのみ検証されるように見えることです。

schema: ->
  title:
    type: "Text"
    validators: ["required"]

ただし、 backbone.validation には、この例以外で使用したい組み込みのバリデーターが幅広く含まれているため、これは避けたいと思います。

バックボーンフォームの状態に気づきました

検証には 2 つのレベルがあります。スキーマ バリデーターと通常の組み込みのバックボーン モデルの検証です。バックボーン フォームは、form.commit() または form.validate() が呼び出されたときに実行されます。

ただし、個々のフィールドを検証するときに通常の検証を実行しているかどうかわかりませんか? これを行う理由は、ユーザーがイベントの作成を開始したときに、まだ入力されていないフィールドを検証したくないということです。

検証をスキーマに移動せずに個々のフィールドを検証する方法はありますか?

前もって感謝します。

=======更新=======

個々のフィールドのフォーム エディターのソース コードを見ると、検証機能は次のようになります。

validate: function() {
  var $el = this.$el,
      error = null,
      value = this.getValue(),
      formValues = this.form ? this.form.getValue() : {},
      validators = this.validators,
      getValidator = Form.helpers.getValidator;

  if (validators) {
    //Run through validators until an error is found
    _.every(validators, function(validator) {
      error = getValidator(validator)(value, formValues);

      return error ? false : true;
    });
  }

  return error;
},

モデルの検証を使用していないように見えるので、これをどのように組み込むことができるのだろうか?

4

0 に答える 0