代码之家  ›  专栏  ›  技术社区  ›  eozzy

将数据对象传递到激发事件

  •  0
  • eozzy  · 技术社区  · 7 年前

    我使用的是Mapbox GL,文档说明:

    将侦听器添加到指定的事件类型。

    参数:

    类型 (字符串)要添加侦听的事件类型。

    听众 (函数)在触发事件时要调用的函数。使用传递给的数据对象调用Listener函数 使用目标和类型属性进行扩展。

    资料来源: 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
    

    我做错什么了?

    2 回复  |  直到 7 年前
        1
  •  2
  •   stdob--    7 年前

    您可以使用绑定:

    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/ ]

        2
  •  -1
  •   Scarysize    7 年前

    你需要放下 {customData: 'foo'} :

    map.on('click', 'somelayer', customFunction);
    

    mapbox gl尝试将对象作为函数执行。