Mootools - вызов функции класса из связанного класса CSS приводит к ошибке «не функция» - PullRequest
0 голосов
/ 11 июля 2011

Использование 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 на страницу). Сложность состоит в том, что обращение к функции reportComment () с помощью this.reportComment () приводит к ошибке, утверждающей, что функция не существует, когда она явно существует.

Просмотр подобных вопросов о переполнении стека, похоже, не ответил на этот вопрос ... поэтому спрашиваю в надежде, что кто-то может указать мне правильное направление.

1 Ответ

0 голосов
/ 11 июля 2011

У вас есть проблемы с bind и events:

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;
}
...