3

Backbone-Forms を使用しており、次のスキーマでモデルを作成しました。

  schema:
    title:
      type: "Text"
      validators: ["required"]
    description: 
      type: "TextArea"
      validators: ["required"]
    location:
      type: "Text"
      validators: ["required"]

空のフィールドでフォームを送信しようとすると、検証が正しく行われ、すべてがエラー クラスを受け取ります。

ただし、入力を更新してコンテンツを含めると、フォームを再度送信してみるまでエラー クラスが入力から削除されません。同様に、最初に有効な入力を入力してからすべてのコンテンツを削除した場合、フォームをもう一度送信してみるまでエラーは通知されませんが、すぐに知りたいです。

変更された入力フィールドで検証をトリガーする方法はありますか?

4

2 に答える 2

0

Backbone-Forms で「リアルタイム検証」を行う方法は、Backbone.Form モデルを拡張し、イベントを添付してカスタム メソッドを呼び出してフィールドを検証し、カスタムを「新規」にすることです。 Backbone.Form の代わりのフォーム

(Backbone.Form は Backbone.View の単なるサブクラスです)

サンプルコードは次のとおりです。

    var MyCustomForm = Backbone.Form.extend({
        events: {
            "blur input": "validateRealTime"
        },
        validateRealTime:   function(e){
            if(e.currentTarget.value == "") return;
            var err = this.fields[e.currentTarget.name].validate();
            if(err)
                myDisplayErrorMethod(err.message);
        }
    });

これの素晴らしい点は、モデル スキーマで定義したバリデーターを利用するため、そこで定義したのと同じ検証とメッセージをすべて取得できることです (実際にカスタム メッセージを定義した場合)。

また、私が行ったようにいくつかのバリデーターを定義した場合、ユーザーがフィールドから「ぼかし」を行うたびに、すべてのバリデーターが通過するまで、順番にバリデーターが呼び出されます。それはプラスでした。

補足として、あなたは私がしたことに気付くでしょうif(e.currentTarget.value == "") return;。これは私の使用例にすぎません。ユーザーがクリックしてクリックしたという理由だけでエラーを表示したくありませんでした。

于 2013-09-19T19:35:15.110 に答える
0

ドキュメントから: http://backbonejs.org/#Model-validate :

isValidmodel.isValid()

黙ってモデルに変更を加えると、モデルが無効な状態になる可能性があります...フォーム入力を扱うときに役立ちます。model.isValid()検証関数に従って、モデルが現在有効な状態にあるかどうかを確認するために呼び出します。

https://github.com/thedersen/backbone.validation#what-gets-validated-whenからも

何がいつ検証されるのか?

Backbone v0.9.1 以降を使用している場合、モデル内のすべての属性が検証されます。ただし、インスタンス名が (明示的にまたはデフォルト値で) 設定されていない場合、その属性は設定される前に検証されません。

これは、入力されていない入力エラーについてユーザーに警告したくないため、入力されたフォームを検証する場合に非常に便利です。

モデル全体 (設定されているかどうかの両方の属性) を検証する必要がある場合は、モデルに対してvalidate()またはisValid(true)を呼び出すことができます。

Backbone-Forms のドキュメントでは、model.validate について具体的に言及しています。

https://github.com/powmedia/backbone-forms#model-validation

必要な編集イベントまたはクリック イベントまで、model.Validate を簡単にフックできます。

また、これが便利だと思うかもしれません (ただし、Backbone.Forms と互換性があるかどうかはわかりません):

https://github.com/thedersen/backbone.validation

于 2012-10-30T12:27:43.403 に答える