0

モデルをコレクションに追加すると、モデルの Validate メソッドが複数回実行されるのはなぜでしょうか。

モデルの検証をこれまで取り除いても...

Client.Model = Backbone.Model.extend ({

    validate : function(attrs) {
        if ( !attrs.first_name ){
            return 'Required';
        }   
    }  

});

validate メソッド内から console.log() を実行すると、5 回呼び出されていることがわかります。最初の 2 つは正常に検証され、3 番目は失敗し、4 番目と 5 番目もパスします (その後、サーバー上で正しく同期されます)。

カスタム メッセージ プラグインを構築していて、検証が発生する 5 回すべてが呼び出されているため、これが問題を引き起こしています。

新しいモデルを作成してサーバーからモデルを取得すると、正しく呼び出されることがわかっています。しかし、私が理解できないのは、検証するためのこの「3番目の」呼び出しが常に失敗することです。(ところで、サーバーの問題ではないことがわかりました)

私はここで何が欠けているのだろうか..

前もって感謝します。

:)

JSBIN - http://jsbin.com/ucowoq/2/edit

コンソールを確認してください。明らかに POST にエラーがありますが、validate メソッドが 5 回実行されていることが示されています。私のアプリでは、毎回 3 回目の検証に失敗しています。サーバーは、500 エラーまたは作成されたモデルの JSON のみを返します。

これがこれを見ている人に役立つことを願っています。

編集:すべてが正しく機能するように、このハックを思い付きました。検証メソッドが5回呼び出されることにまだ満足していませんが、検証が失敗する原因となった1回の発生には、キーと「未定義」の値を持つオブジェクトが含まれていたため、何かを返す前にそれを確認しています. これにより、正しいタイミングでエラーを取得できるようになったため、「メッセージ」プラグインを実装できます。

    validate: function( attrs ){
      if (attrs.first_name !== undefined){
        if (!attrs.first_name)
          return 'first name required';
      }
    } 
4

1 に答える 1

1

ここでこの混乱を引き起こす行は次のとおりです。バックボーン0.9.9行411モデルの属性をクリアしてから、再度設定します。

なぜそれが重要なのですか?検証に失敗しますが、その検証の結果はどこでも使用されないため、編集で未定義のチェックを行う必要はありません。

于 2012-12-30T14:54:46.200 に答える