Получение правильного «этого» в обратном вызове кнопки jQuery - PullRequest
3 голосов
/ 15 июля 2009

У меня есть класс:

function RustEditor() {

this.init = function() {

    var saveButton = this.container.find("button.saveButton");
    saveButton.click(function(){this.save();});

};
...

Когда я нажимаю кнопку, он жалуется, что this.save не является функцией. Это потому, что «this» относится не к экземпляру RustEditor, а к кнопке. Какую переменную я могу использовать внутри этого обратного вызова, чтобы указать на экземпляр RustEditor? Я мог бы использовать rust.editor (это имя в глобальной области видимости), но это вонючий код.

Ответы [ 2 ]

12 голосов
/ 15 июля 2009

Обычная практика - заключать в значение this вот так:

 function RustEditor() {

 this.init = function() {
    var self = this;

    var saveButton = this.container.find("button.saveButton");
    saveButton.click(function(){self.save();});

 };

Обновление с предложением от tvanfosson : this получает отскок, когда вызывается обработчик события, и поэтому вам нужно захватить ссылку на класс во время создания объекта с переменной, которая сохранит эту ссылку в закрытии.

1 голос
/ 15 июля 2009

В RustEditor () вы можете сначала скопировать ссылку на кнопку и использовать ее.

...