Mootools - 来自绑定的css类的调用类函数导致'not a function'错误

时间:2011-07-11 17:18:05

标签: javascript events binding mootools

使用Mootools 1.3.2

代码如下:

var DNReportAbuse = new Class({

Extends: DNUserDialog,
comment_id: null,
container: null,

initialize: function(classname) 
{
    var bindclass = $(document.body).getElements(classname);

    bindclass.each(function(el) {
        el.addEvents({
            click: function() {
                this.reportComment();
            }.bind(this)
        });
    });
},

reportComment: function() {
    this.preventDefault();
    alert('hello');
    return false;
}
});

事件确实绑定,当“this.reportComment();”被替换为“alert('hello world');”它完全有用......

...但是当使用“this.reportComment()”时,我会收到一个错误,Firebug解释为“函数this.reportComment()不是函数”。

我想我的问题与引用其适当范围之外的类函数有关,尽管我对为什么......或者如何解决问题感到有点困惑。最终目标是实现reportComment()函数的点击绑定到css类的所有成员(每页最多20个)。难点在于使用“this.reportComment()”引用reportComment()函数会导致错误声明该函数不存在,当它明显存在时。

在Stack Overflow上查看类似的问题似乎没有回答这个问题......所以希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

bindevents存在一些问题:

initialize: function(classname) 
{
    var bindclass = $(document.body).getElements(classname);
    var _self = this; //var to store the 'real' this you will use
    bindclass.each(function(el) {
        el.addEvents({
            click: function(event) { //pass the event
                this.reportComment(event);
            }.bind(_self) //'this' is referring to the inner each function callback
        });
    });
},

reportComment: function(event) {
    event.preventDefault(); //preventDefault on the event, not on 'this'
    alert('hello');
    return false;
}