code: function (targetInfo, eventName, event) {
          targetInfo = targetInfo || {};
          var el = targetInfo.target;
          if (el && el.silent) {
              return;
          }
          var eventHandler = 'on' + eventName;
          var eventPacket = makeEventPacket(eventName, targetInfo, event);
  
          while (el) {
              el[eventHandler]
                  && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));
  
              el.trigger(eventName, eventPacket);
  
              el = el.parent;
  
              if (eventPacket.cancelBubble) {
                  break;
              }
          }
  
          if (!eventPacket.cancelBubble) {
              // 冒泡到顶级 zrender 对象
              this.trigger(eventName, eventPacket);
              // 分发事件到用户自定义层
              // 用户有可能在全局 click 事件中 dispose，所以需要判断下 painter 是否存在
              this.painter && this.painter.eachOtherLayer(function (layer) {
                  if (typeof (layer[eventHandler]) === 'function') {
                      layer[eventHandler].call(layer, eventPacket);
                  }
                  if (layer.trigger) {
                      layer.trigger(eventName, eventPacket);
                  }
              });
          }
      }
docs: 事件分发代理
  
  @private
  @param {Object} targetInfo {target, topTarget} 目标图形元素
  @param {string} eventName 事件名称
  @param {Object} event 事件对象