1
 DM.Backbone.View.feedback = Backbone.View.extend( {
     initialize: function (){
        this.render( this.model.get( 'data' ) || [] );
     },
     render: function ( param ){
        if ( $( '.problem_report_reply' ).length > 0 ) {
            _.bind( this.mail_to, this );
            $( '.problem_report_reply' ).off().on( 'click', this.mail_to )
        }
     },
     mail_to: function (){

        console.log( 'this', this )
     } );

ここでBackbone.Viewの私のコード。メソッドを DOM 要素にバインドする際に問題があります。console.logは、クリックした DOM 要素のように表示されます。undescore メソッド_.bindを使用してthisのバインドを修正しましたが、どのような問題がありますか?

4

1 に答える 1

2

_.bind新しい関数を作成しますが、既存の関数は変更しません。このように使用できます

render: function ( param ){
    var func;

    if ( $( '.problem_report_reply' ).length > 0 ) {
        func = _.bind(this.mail_to, this);
        $('.problem_report_reply').off().on('click', func);
    }
}

または_.bindAll、オブジェクト内の関数を変更する を使用します

DM.Backbone.View.feedback = Backbone.View.extend({
    initialize: function (){
        _.bindAll(this, "mail_to");
        this.render( this.model.get( 'data' ) || [] );
    },
    render: function ( param ){
        if ( $( '.problem_report_reply' ).length > 0 ) {
            $( '.problem_report_reply' ).off().on('click', this.mail_to)
        }
    },
    mail_to: function (){
        console.log( 'this', this )
    }
});
于 2013-05-24T11:36:04.777 に答える