1

検証を提供するために、thedersen の Backbone.validation プラグインを使用しています。

検証自体はこれまでのところ機能しており、フォームを送信すると実行されます。ビューに検証エラーをリッスンさせることについてのみ成功しません。

ハウツーには、次の方法で検証イベントをリッスンできると書かれています。

model.bind('validated:invalid', function(model, attrs) {
   // do something
});

ソース: http://thedersen.com/backbone.validation/#events/validated

define(['jquery', 'underscore', 'backbone', "models/security/user", 'text!templates/security/registration.html'], function($, _, Backbone, SecurityUserModel, Template){

    var SecurityRegistrationView;

    SecurityRegistrationView = Backbone.View.extend({
        initialize: function(){
            this.model = new SecurityUserModel();
            this.render();
            Backbone.Validation.bind(this);
        },
        render: function(){
            $(this.el).append(Template);
        },
        events: {
            "submit form": "submit"
            , "validated:valid": "valid"
            , "validated:invalid": "invalid"
        },
        submit: function(e){
            e.preventDefault();

            var username, email, password;
            username = $("#_user_username").val();
            email = $("#_user_email").val();
            password = $("#_user_password").val();

            this.model.set('username', username);
            this.model.set('email', email);
            this.model.set('password', password);

            this.model.validate();

            console.log(this.model.validate());
        },
        invalid: function(){
            $("input").addClass("inputError");
            alert(" ");
        },
        valid: function(){
            alert(" ");
            this.model.save(function(){
                // server validation callback...
            });
        }

    });

    return SecurityRegistrationView;
});

では、モデル関連のイベントをフォームで使用するにはどうすればよいでしょうか?

4

1 に答える 1

4

イベントvalidated:validvalidated:invalidはDOMイベントではなく、バックボーンイベントです。Backbone.ViewイベントハッシュはDOMイベント(ソース)を処理するためのものですmodel.bindが、は特定のモデルによってトリガーされたイベントを利用するために使用されます。

したがって、これらの行をイベントから削除します-ハッシュ:

events: {
  "submit form": "submit", // LEAVE THIS AS IT IS A DOM EVENT
  "validated:valid": "valid", // REMOVE THIS
  "validated:invalid": "invalid" // REMOVE THIS
}

これを初期化関数に追加します

initialize: function(){
  this.model = new SecurityUserModel();
  this.render();
  Backbone.Validation.bind(this);

  this.model.bind('validated:valid', this.valid); // NEW
  this.model.bind('validated:invalid', this.invalid); // NEW
}

これで、モデルイベントを正しい方法で利用できます。

お役に立てれば!

于 2012-07-09T15:28:14.497 に答える