Как мне получить доступ к переменным класса из события в Javascript? - PullRequest
0 голосов
/ 20 октября 2010

Я использую библиотеки прототипов javascript. Мой код ниже. Я создал класс, и в этом классе я создал прослушиватель событий для одного из методов класса. В этом методе мне нужно получить доступ как к атрибутам элемента формы, который вызывает событие, так и к свойствам класса. В настоящее время код понимает $ (this) .getValue () в событии, потому что это присваивается элементу формы, который вызвал событие. Как я могу получить доступ к свойствам this.makingRequest и this.user из функции события? Могу ли я как-то передать их в качестве параметров? Если так, то как? Ничто из того, что я пытался до этого момента, не работает. Спасибо за любую помощь.

function AddressBookEntryObj(user, selectField)
{
    this.selectField = selectField;
    this.user = user;
    this.makingRequest = false;
    this.debugMode = false;

    Event.observe(this.selectField, 'change', handleEvent);
}

//Prototype statements
AddressBookEntryObj.prototype.handleEvent = handleEvent;
//End prototype statements

function handleEvent()
{
    try
    {
        if (!this.makingRequest) 
        {
            this.makingRequest = true;    
            var ajax = 
                new Ajax.Request(
                    '/servlet/MyReallyCoolServlet',
                    {
                        method:     'get', 
                        parameters:    { 
                            action:         'doGet', 
                             whichFunc:         'MyReallyCoolFunction',
                             fieldValue:     $(this).getValue(),
                             user:            this.user
                         }, 
                        onCreate:    handleAjaxCreate,
                        onComplete: handleChangeComplete 
                    }
                );
            return true;
        } 
        else 
        {
            return false;
        }
    }
    catch (ex)
    {
        alert("handleEvent Error: \r\n" + ex.toString());
    }
}

Спасибо! * * 1004

Andrew

Ответы [ 2 ]

0 голосов
/ 20 октября 2010

Пример jsfiddle

Посмотрите на этот jsfiddle, который я сделал с вашим кодом.Вам нужно было добавить «bind (this)» в ваш обработчик обратного вызова.В результате этого «this» станет вашим объектом и будет использовать «e.target» для доступа к элементу html.

_Michael

0 голосов
/ 20 октября 2010

Первое использование:

AddressBookEntryObj.prototype.handleEvent = function()
{
}

Тогда this внутри handleEvent должно указывать на AddressBookEntryObj. Чтобы быть уверенным, что она будет работать везде внутри этой функции, используйте что-то вроде:

var _this = this;

А затем используйте _this внутри любых обработчиков событий.

...