Как указать класс "this" из метода прослушивателя событий класса ajaxSuccess? - PullRequest
1 голос
/ 04 мая 2019

Я нашел быстрое решение в своем приложении для обновления содержимого при любых изменениях - ajaxSuccess (), но я не могу понять, как связать «это» не с event.target ...

Метод bind () работал нормально для обычного eventListener, но он не работает с ajaxSuccess, и эта проблема не дает мне спать 2 дня.

class DataManager {

    constructor() {
        this.data = [];
        this.ajaxSuccessListener().bind(this); // not working as it should;
    }

    ajaxSuccessListener() {
        $(document).ajaxSuccess(function (event, request, settings) {
            if (settings.type !== "GET") {
                this.refresh();
            }
        })
    }

    refresh() {
        // refreshes the content
    }
}

Я ожидаю запуска метода refresh () всякий раз, когда выполняется http-запрос, который не является «GET». Если есть проблема с самим ajaxSuccess (), может быть, есть другое элегантное решение?

1 Ответ

0 голосов
/ 04 мая 2019

Поскольку вы используете класс JavaScript, вы можете использовать неявное связывание с помощью функции стрелки:

class DataManager {

    constructor() {
        this.data = [];
    }

    // ajaxSuccessListener() {
    // () => {} implicitly binds to "this"
    ajaxSuccessListener = () => {
        $(document).ajaxSuccess(function (event, request, settings) {
            if (settings.type !== "GET") {
                // "this" now refers to the instance of "DataManager"
                this.refresh();
            }
        })
    }

    refresh() {
        // refreshes the content
    }
}

Примечание. Я не пробовал запускать какой-либо из этого кода, просто указав, как действуют стрелкидаст вам то, что вы конкретно просили.Как уже упоминалось, я не вижу в вашем коде, как ajaxSuccessListener() когда-либо вызывается ...

...