1

オブジェクト プロパティを jquery セレクターとして使用すると問題が発生します

define(["models/security/user", 'text!templates/security/registration.html'], function(SecurityUserModel, Template){

    var SecurityRegistrationView;

    SecurityRegistrationView = Backbone.View.extend({
        initialize: function(){
            // setting model
            this.model = new SecurityUserModel();

            // binding validation
            Backbone.Validation.bind(this);
            this.model.bind("validated:valid", this.valid);
            this.model.bind("validated:invalid", this.invalid);

            this.render();
        },
        form: {
            "username": "#_user_username"
            , "email": "#_user_email"
            , "password": "#_user_password"
        },
        render: function(){
            $(this.el).append(Template);
        },
        events: {
            "submit form": "submit"
        },
        submit: function(e){
            e.preventDefault();

            this.model.set("username", $(this.form.username).val());
            this.model.set("password", $(this.form.email).val());
            this.model.set("email", $(this.form.password).val());
            this.model.validate();

            if (this.model.isValid) {
                this.model.save();
            }
        },
        valid: function(model, attrs){
            console.log(attrs[0]);
            $(this.form[attrs[0]]).parent("div.control-group").addClass("success");
        },
        invalid: function(model, attrs){
            console.log(attrs[0]);
            $(this.form[attrs[0]]).parent("div.control-group").addClass("error");
        }
    });

    return SecurityRegistrationView;
});

クロムでのコンソール出力:

username registration.js:45
Uncaught TypeError: Cannot read property 'username' of undefined registration.js:46
password registration.js:45
Uncaught TypeError: Cannot read property 'password' of undefined registration.js:46
email registration.js:45
Uncaught TypeError: Cannot read property 'email' of undefined registration.js:46
username registration.js:45
Uncaught TypeError: Cannot read property 'username' of undefined registration.js:46



$(this.form.username).val(); // works
$(this.form[someVar]); // does not work
4

2 に答える 2

1

thisあなたvalidinvalidコールバックではおそらくあなたのビューを参照していません。メソッドのバインディングをinitialize適切なスコープに変更します。

this.model.bind("validated:valid", this.valid, this);
this.model.bind("validated:invalid", this.invalid, this);
于 2012-07-10T12:00:53.040 に答える
0

置き換えてみてください:

$(this.form.username)

と:

$(this.form['username'])

または、「これ」なしで:

$(form['username'])
  • 「パスワード」や「メール」も同様です。
于 2012-07-10T11:58:32.207 に答える