Я использую Mapbox GL, и в документе говорится:
Adds a listener to a specified event type.
Parameters:
type(string) The event type to add a listen for.
listener(Function) The function to be called when the event is fired. The listener function is called with the data object passed to fire , extended with target and type properties.
Источник: https://www.mapbox.com/mapbox-gl-js/api/#evented#on
Итак, если я это сделаю:
map.on('click', 'somelayer', { customData: 'foo' }, customFunction);
Я получаю сообщение об ошибке:
Uncaught TypeError: i.call is not a function
Что я делаю неправильно?
Вам нужно сбросить {customData: 'foo'}
:
map.on('click', 'somelayer', customFunction);
mapbox-gl пытается выполнить ваш объект как функцию.
Куда вы хотите передать данные?
Вы можете использовать привязку:
map.on('click', customFunction.bind({customData: 'foo'}))
Или, если вы хотите сохранить контекст, вы можете использовать обертку:
function extend(fn, data) {
return (e) => {
e.data = data
fn(e)
}
}
map.on('click', extend(customFunction, {
customData: 'foo'
}))
[http://jsfiddle.net/tu570Lgz/]
А что насчет использования стрелочных функций? См. jsfiddle.net/oy8j9L75 customData не передается в customfunction.
@ToniBCN Вы не можете повторно привязать это в стрелочной функции - stackoverflow.com/a/33308151/4989460
Конечно, это сработает, если я откажусь от этого, но мне нужно передать данные.