2011-12-30 62 views
1

我想實現揭示模塊模式。我需要爲其中一個元素分配一個事件處理程序,這個事件處理程序是我在原型中定義的一個函數,但是我得到了this.trigger不是函數錯誤。如何在揭示原型模式中分配事件?

這裏是我做了什麼:

//constructor 
var MyClass = function (settings) { 
    this.someElement=$(settings.elementID); 
} 

//prototype  
MyClass.prototype = function() { 
    var init = function() { 
     this.someElement.change(this.handler); 
    }, 
     handler = function() { 
     this.someElement.hide(); 
    }; 

    return { 
     init : init, 
     handler : handler 
    }; 
}(); 

以下是我把它叫做:

var myClass = new MyClass(); 
myClass.init(); 
+2

我看不到'this.trigger'從哪裏來。 – hugomg 2011-12-30 23:48:45

+0

我正在嘗試在handler中使用this.someElement。這是關閉問題嗎? – 2011-12-31 12:35:06

+0

我看到的一個問題是,在MyClass.prototype中,處理程序沒有被正確地限定範圍。沒有「var」它是全局聲明的,你可能不想要。可能不是問題,但你應該修復它。那麼你是否試圖從一個「新」實例調用處理程序?您還應該發佈調用此方法的代碼。 – thescientist 2011-12-31 12:43:39

回答

1

我猜你的構造應該是

var MyClass = function (settings) { 
    this.someElement = jQuery("#" + settings.elementID); 
} 

然後你就可以調用jQuerys trigger方法在那個元素上使用(new MyClass({elementID:"someid"})).someElement.trigger(),因爲「trigger」是jQuery實例的方法,它是對象的「someElement」屬性。

此外,您的處理程序將無法正常工作,因爲它是在元素的上下文中調用的,而不是您的對象的上下文中調用的。所以它應該是

MyClass.prototype.init = function init() { 
    this.someElement.change(this.handler || function defaulthandler() { 
     $(this).hide(); 
    }); 
};