骨干绑定不正确

时间:2013-05-24 11:24:40

标签: javascript backbone.js underscore.js backbone.eventbinder

 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元素。我使用非核心方法 _。bind 来纠正绑定这个,这有什么问题?

1 个答案:

答案 0 :(得分: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 )
    }
});