Я использую Annotator из http://annotatorjs.org/ для написания качественного веб-приложения для анализа данных (QDA). Я хочу сделать несколько звонков в его API. Эти функции принимают объект аннотации в качестве аргумента. Аннотация сохраняется с помощью метода jQuery $().data()
для тегов <span>
, которые представляют выделенный текст аннотации. Вы можете получить к нему доступ с помощью кода, подобного следующему:
$('.annotator-hl').map(function (_, elem) {
return $(elem).data('annotation');
}).toArray()
Проблема, с которой я столкнулся, заключается в том, что при запуске этого кода я получаю пустой массив. Данные не извлекаются вообще. Я поместил несколько точек останова в код для более глубокого изучения и обнаружил, что в определенных кадрах стека этот код возвращает правильные данные, а в других кадрах стека он ничего не возвращает. Это очень странно, потому что я не знаю никакой связи между использованием $().data()
для хранения данных и некоторыми функциями, где эти данные были бы видимыми или невидимыми.
Я думал, что я сошел с ума, но смог воспроизвести этонаблюдение в нескольких функциях аннотатора путем установки точек останова в разных местах. Например, это обработчик для наложения над аннотацией: https://github.com/openannotation/annotator/blob/v2.0.0-alpha.3/src/ui/viewer.js#L363
Если вы установите точку останова и перемещаетесь вверх и вниз по кадрам стека, в некоторых кадрах объекты данных могут быть извлечены, а в некоторых -не. Хотя я не вижу в этом никакого паттерна.
Я думал, что это может быть из-за того, как Webpack компилировал код, но это не связано, потому что у меня была та же проблема, когда я писал код кактег script с использованием глобальных переменных.
Так как это имеет смысл? Почему объекты данных jQuery, связанные с элементами, будут видны из одних функций, а не из других?