MapboxGLJS-Evented

MapboxGLJS源码解读系列——evented.js

Evented

作用

用于事件通信

源码阅读

我们带着以下几个问题,来解读下 Evented 这个类的源码:成员变量及方法、如何在不同的类中通信

  1. 成员变量及方法

    Untitled

    _listenersListener (相当于函数指针)的数组

    _oneTimeListeners_listeners类型相同,区别是用于存放触发一次的回调函数

    _eventedParent类型还是 Evented,用于设置事件冒泡触发的父类

    _eventedParentData类型是 Object 用于传递事件冒泡的数据

  2. 如何在不同的类中通信

    • 是几乎所有类的基类

      通过下图,我们可以看到, Evented 是几乎所有类的基类,其他类都继承了其成员函数。在 Evented 的派生类未重载 onofffirelistenssetEventParent函数的时候,派生类调用这些函数,实际上是基类的实现。

Untitled

  • 事件通信时序图

    我们通过时序图来描述如下一个场景: Style 加载完成样式,然后发送 style.load信号 ,触发 Map 相应函数,完成地图更新。

    Untitled

    发送方:Style,通过 fire来发送事件类型

    接收方:Map,通过 on 来添加监听函数