如何在揭示原型模式中分配事件?

时间:2011-12-30 16:04:28

标签: javascript design-patterns revealing-module-pattern

我正在尝试实施Revealing Module Pattern。我需要为一个元素分配一个事件处理程序,这个事件处理程序是我在protoype中定义的函数,但我得到 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();

1 个答案:

答案 0 :(得分:1)

我猜你的构造函数应该是

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

然后,您将能够使用trigger在该元素上调用jQuerys (new MyClass({elementID:"someid"})).someElement.trigger()方法,因为“trigger”是jQuery实例的一个方法,它是对象的“someElement”属性。 / p>

此外,您的处理程序将无法工作,因为它在元素的上下文中调用,而不是在您的对象的上下文中调用。所以它应该是

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