JavaScript, MooTools и область видимости переменных/объектов

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

У меня есть объект, представляющий рабочее пространство пользователя, и в ответ на действие сервера он клонирует div, изменяет некоторые его свойства, размещает его в рабочем пространстве, делает его перетаскиваемым и добавляет действие onComplete. Это действие предназначено для вызова другого метода объекта рабочей области для отправки обновленной позиции div обратно на сервер для сохранения макета.

Я разделил класс на соответствующие методы:

var MooPanel = new Class( {
    createDiv: function() {
        var newDiv = existingDiv.clone();
        var dragHandle = newDiv.title;

        var move = new Drag(newDiv, {
            'handle':  dragHandle,
            'x': true,
            'y': true,
           /* original line: 
            'onComplete': function( el, dr ) { updateCoordinates( el, dr ); }
            */
           /* working line: */
            'onComplete': function( el, dr ) { this.updateCoords(el); }.bind(this)
        }
    },
    updateCoordinates: function( el, dr ) {
        send.to.server();
    }
});

Теперь у меня возникли проблемы с вызовом моего метода updateCoordinates. Я перепробовал множество комбинаций this и других ключевых слов, но не смог найти правильное решение.

Как правильно называть updateCoordinates?


person Martin    schedule 07.01.2010    source источник


Ответы (1)


Попробуйте это (каламбур не предназначен):

onComplete: function( el, dr ) { this.updateCoordinates( el, dr ) }.bind(this);

внутри вашей функции onComplete this относится к самой функции onComplete. Привязав функцию к вашему классу, this затем ссылается на сам экземпляр класса.

person Rob    schedule 07.01.2010
comment
Великолепно, спасибо, я пробовал различные комбинации this и .bind(this), но так и не понял их правильно, я отредактировал ответ, чтобы включить правильную строку, спасибо! - person Martin; 08.01.2010