2013-02-15 70 views
1

我正在使用JQuery(Mobile)創建一個應用程序,並且我正面臨着JQuery事件結構的問題。我定義了一個虛擬「類」是這樣的:將JQuery事件分配給自定義對象方法

MyClass = function() 
{ 
    this.property = initvalue; 

    this.foo = function() 
    { 
     alert("That's my property = " + this.property); 
    } 
} 

然後,定義了基於MyClass的一個目的:

var obj1 = new MyClass(); 

當我使用obj1.foo()作爲回調函數爲這個問題是通報的事件,例如:

$(element).click(obj1.foo); 

$(element).load(URL, obj1.foo); 

執行foo()時,「this」引用元素,而不是對象「obj1」,當然,我不能通過自引用訪問對象的「屬性」。我該如何解決它?

回答

0

您可以使用jQuery的proxy方法:

$(element).load(URL, $.proxy(obj1.foo, obj1)); 

這將分配obj1上下文的方法。

0

可以bind的方法,它的實例:

$(element).click(obj1.foo.bind(obj1)); 

.bind()方法返回一個函數,所以你還是傳遞一個函數給jQuery的方法,但此功能將有其背景的約束,無論你傳遞給.bind()

如果您需要支持舊瀏覽器,則可以使用之前鏈接的MDN文章中給出的填充,或者也可以使用jQuery $.proxy方法。

0

您可以將單擊事件綁定到匿名函數,該函數在對象的上下文中引用緩存版本this

var myClass = this; 
$(element).click(function() { myClass.foo(); }); 

一般來說它更高性能的使用對像.bind $,$ .proxy和_.bindAll庫提供的替代這種方法(雖然在當前的例子中,我認爲表現會相媲美)。請參閱this article on context binding

相關問題