2016-12-08 4 views
1

私は動的にレンダリングされるビューを持っています。いくつかの入力を持っているかもしれないし、持っていないかもしれません。 ユーザーがすべてを塗りつぶしてデータを送信しようとすると、this.model.isValid(true)(またはthis.model.isValid())と呼び出し、入力からのデータが有効であってもfalseを返します。Backbone.Validationを使用したモデル属性の検証をスキップ

Backbone Validationは、私たちがレンダリングしなかった入力の属性を検証しようとしていると思います。

stickedビューの要素がない場合、モデル属性をスキップするソリューションはありますか?

UPDATE:

マイモデルは次のようになります。

MyApp.module("RecordModel", function (RecordModel, MyApp, Backbone) { 
    RecordModel.recordModel = Backbone.Model.extend({ 
     validation: { 
      inn: { 
       pattern: 'inn', 
       msg: MyApp.messages.inn 
      }, 

      bik: { 
       pattern: 'bik', 
       msg: MyApp.messages.bik 
      }, 

      uin: { 
       pattern: 'uin', 
       msg: MyApp.messages.uin 
      }, 

      sum: { 
       pattern: 'sum', 
       msg: MyApp.messages.sum 
      } 

     } 
    }); 
}); 

バインディング:

bindings: { 

    '#uin': { 
     observe: 'uin', 
      setOptions: { 
      validate: true 
     }, 

     events: MyApp.Validation.events.inputEvents 
    }, 

    '#bik': { 
     observe: 'bik', 
      setOptions: { 
      validate: true 
     }, 
     events: MyApp.Validation.events.inputEvents 
    }, 

    '#inn': { 
     observe: 'inn', 
      setOptions: { 
      validate: true 
     }, 
     events: ParkingMate.Validation.events.inputEvents 
    }, 

    '#sum': { 
     observe: 'sum', 
      setOptions: { 
      validate: true 
     }, 
     events: MyApp.Validation.events.inputEvents 
    } 
} 

なんらかの理由で、例えば#sumの入力は表示されません。私たちはDOMに入っていないので、RecordModelには存在しませんが、バックボーンはまだそれを検証しようとします。 DOMにこの入力があっても、すべて正常に動作します。デフォルトでは

+0

は、いくつかの追加情報が必要これらのフィールドのモデルバリデーションがどのように実現されたかについて –

+0

Denysが正しいです。[mcve]を含めてください。 –

答えて

1

How can I allow empty values but still validate if the user enters something?

あなたは属性のバリデータを設定している場合、それは 必要と考えられています。ただし、空の値を許可し、何かが入力されたときに がまだ妥当性を確認する場合は、他のバリデータに加えてrequired: falseを に追加します。

validation: { 
    value: { 
     min: 1, 
     required: false 
    } 
} 

あなたは(作成時のような)空の値を任せることはできない場合は、Backbone.validation overrides isValidデフォルトの動作に機能を追加します。面白いのは、配列パラメータであり、我々は渡すことができます。これにより

// Check if name and age are valid 
var isValid = model.isValid(['name', 'age']); 

を、私たちはその後、現時点ではモデル内に存在する唯一のフィールドを検証することができます

model.isValid(_.keys(model.attributes)); 
+1

更新をご覧ください。あなたの2番目の解決策はかなりいいですが、 'model.attributes'の代わりに、レンダリングされた入力IDを収集し、入力IDと属性名が一致するので' model.isValid() 'に引数として渡します。 – nllsdfx

+0

@DmitrySorokaはい、あなたのテクニックはうまくいくでしょう。 '_.keys'を使用した私の例は、方法を示すことですが、あなたの文脈ではうまく動作しないかもしれません。 –

関連する問題