2010-08-12 88 views
1

我有一個組件會觸發onFocus事件。我正在分配一個類方法來處理onFocus事件。在事件處理程序中,我需要訪問類實例和事件對象本身。Mootools - 綁定到類實例和訪問事件對象

但是,當我使用.bind(this)時,我不能再獲取事件對象,因爲範圍現在已更改爲類實例。如果我不使用.bind(this),我可以訪問事件對象,但不能訪問類實例。

我確定有一個解決方案,但我一直無法弄清楚這一點。有任何想法嗎?

謝謝。

new Class({ 
    handleComponentFocus : function() { 
     // this refers to the class instance 
     // I would also like to get the event information as well, but can't now that the scope has been changed  
    }.bind(this) 

    this.pickList = new BasePickList({ 
     onFocus : this.handleComponentFocus 
    }); 
}) 

回答

2

你能發佈更多嗎?基本上 - 這個類的骨架以及調用BasePickList的新實例的函數。 BasePickList源不會傷害看到如何觸發事件。

現在,您不需要使用.bind(this)包裝類方法,它會自動執行此操作。至於事件,取決於什麼會觸發它們,如果這是一個輸入字段,那麼它應該傳遞原始事件,您可以通過handleComponentFocus: function(e) {捕獲這些事件,其中e將是事件對象。

這可能是waaay關閉從你正在嘗試做的,但它可能給你一些想法 http://www.jsfiddle.net/dimitar/KdhvG/

檢查控制檯輸出,當你專注於該領域 - 它傳遞控制到handleComponentFocus方法與事件對象(完成時指向複選框的event.target)以及類實例的作用域。

<input type="checkbox" id="foo" /> 

var banana = new Class({ 
    Implements: [Events, Options], 
    initialize: function(options) { 
     this.setOptions(options); 
     this.element = document.id(this.options.element); 
     this.element.addEvents({ 
      focus: function(e) { 
       this.fireEvent("focus", e); 
      }.bind(this) 
     }); 
    } 
}); 

var foo = new Class({ 
    handleComponentFocus: function(e) { 
     console.log(e); 
    }, 
    initialize: function() { 
     this.picklist = new banana({ 
      element: "foo", 
      onFocus: this.handleComponentFocus 
     }); 
    } 
}); 

new foo();