1

backbone.js を調べていて、簡単なログイン ページをセットアップしようとしています。これが私のview.jsファイルです:

window.LoginView = Backbone.View.extend({   

    events: {

    },

    initialize : function() {       
        this.model.bind("error", this.error);       
        this.template = _.template(tpl.get('login'));       
    },  

    login: function(form){
        this.model.set({
            login: $("#login", form).val(),
            password: $("#password", form).val()
        });         
    },  

    render : function(eventName) {      
        $(this.el).html(this.template());   
        $(this.el).find("form").validate({
            submitHandler: this.login
        });
        return this;
    }
});

ご覧のとおり、私は関数jquery.validation内のフォームに添付を使用していrenderます。submitHandler コールバックとして、login関数を設定しました。この行

this.model.set({...

this.model is undefinedエラーが発生しているため、ログイン機能はまたは機能thisと同じではないthisと思います。ログイン機能でバックボーンにアクセスするにはどうすればよいですか?initializerenderthis

4

1 に答える 1

2

1 つの方法は、jQuery.proxy() を使用してログイン関数の「this」の値を設定することです。

$(this.el).find("form").validate({
  submitHandler: $.proxy(this.login, this)
});

Proxy は、「this」の新しい値を持つ新しい関数を返します。render 関数の「this」はビューを指しているため、それを 2 番目の引数としてプロキシに渡します。

于 2012-06-02T14:25:31.127 に答える