Как получить доступ к функции в функции обработчика кликов? - PullRequest
0 голосов
/ 31 марта 2020

Я создаю этот класс, используя чистый javascript:

var SelectFeature = /*@__PURE__*/(function (Select) {
    function SelectFeature() {
        Select.call(this, {
            condition: ol.events.condition.click
        });
    }

    this.on('select', function (e) {
        //some logic
    });

    if (Select) SelectFeature.__proto__ = Select;
    SelectFeature.prototype = Object.create(Select && Select.prototype);
    SelectFeature.prototype.constructor = Select;

    return SelectFeature;
}(ol.interaction.Select));

, как вы можете видеть, я передаю ol.interaction.Select в качестве параметра классу и использую метод Select.call () в SelectFeature в качестве конструктора.

Вот описание класса ol.interaction.Select.

Класс ol.interaction.Exlect имеет члена, который называется getFeatures ( ). Я пытаюсь получить доступ к этому методу при щелчке по некоторому элементу DOM (этот блок находится внутри класса SelectFeature):

$("#popupFeat-closer").click(function () {
    this.getFeatures();
});

Приведенный выше код запускается при нажатии на элемент DOM, но в этой строке:

this.getFeatures();

Я получаю эту ошибку:

Uncaught TypeError: this.getFeatures is not a function

Мой вопрос, как я могу получить доступ к функции getFeatures, которая находится в обработчике события click?

1 Ответ

0 голосов
/ 31 марта 2020

Как упомянуто в комментариях, у вас есть проблема контекста. Почти каждая библиотека или фреймворк имеет метод для сохранения контекста, в jQuery вы можете достичь этого с помощью метода proxy. Нечто подобное должно работать,

$("#popupFeat-closer").click($.proxy(function () {
    this.getFeatures();
}), this);

Я бы сказал, что всегда хорошо использовать способ библиотеки / фреймворка для решения этих проблем, но «старый» способ тоже работает,

var self = this;
$("#popupFeat-closer").click(function () {
    self.getFeatures();
});

jQuery Документы - прокси

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...