2014-03-29 57 views
1

這行代碼的用途是什麼:list.on('dblclick', 'label', this.edit.bind(this)); 我很困惑,爲什麼this.edit.bind(this)被傳遞,而不是隻有this.edit。請注意,這是從'todo mvc' jquery example開始的,並且第一個版本確實是在沒有綁定調用的情況下編寫的。它是在稍後的更新中添加的。背景:將'bind'作爲回調與'on'的調用相結合的用途是什麼?

var App = { 
    init: function() { 
     this.todos = util.store('todos-jquery'); 
     this.cacheElements(); 
     this.bindEvents(); 

     Router({ 
      '/:filter': function (filter) { 
       this.filter = filter; 
       this.render(); 
      }.bind(this) 
     }).init('/all'); 
    }, 

    }, 
    bindEvents: function() { 
     var list = this.$todoList; 
     list.on('dblclick', 'label', this.edit.bind(this)); 
     list.on('click', '.destroy', this.destroy.bind(this)); 
    }, 

    edit: function (e) { 
     var $input = $(e.target).closest('li').addClass('editing').find('.edit'); 
     $input.val($input.val()).focus(); 

回答

1

正是在這種情況下,因爲作者希望thisedit方法裏面指App對象使用。

默認情況下this一個事件處理中將把事件的當前目標,所以如果你想調用App方法事件處理程序中,你將無法使用this.methodname(....)

在這種情況下,我們可以使用$.proxy()/Function.bind()將自定義執行上下文傳遞給回調函數。

+0

感謝您的理解!我誤以爲bind()是一個jQuery綁定。 – stbtrax

相關問題