docs: function (tooltipModel, ecModel, api, payload) {
          if (payload.from === this.uid || env.node) {
              return;
          }
  
          var dispatchAction = makeDispatchAction(payload, api);
  
          // Reset ticket
          this._ticket = '';
  
          // When triggered from axisPointer.
          var dataByCoordSys = payload.dataByCoordSys;
  
          if (payload.tooltip && payload.x != null && payload.y != null) {
              var el = proxyRect;
              el.position = [payload.x, payload.y];
              el.update();
              el.tooltip = payload.tooltip;
              // Manually show tooltip while view is not using zrender elements.
              this._tryShow({
                  offsetX: payload.x,
                  offsetY: payload.y,
                  target: el
              }, dispatchAction);
          }
          else if (dataByCoordSys) {
              this._tryShow({
                  offsetX: payload.x,
                  offsetY: payload.y,
                  position: payload.position,
                  event: {},
                  dataByCoordSys: payload.dataByCoordSys,
                  tooltipOption: payload.tooltipOption
              }, dispatchAction);
          }
          else if (payload.seriesIndex != null) {
  
              if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {
                  return;
              }
  
              var pointInfo = findPointFromSeries(payload, ecModel);
              var cx = pointInfo.point[0];
              var cy = pointInfo.point[1];
              if (cx != null && cy != null) {
                  this._tryShow({
                      offsetX: cx,
                      offsetY: cy,
                      position: payload.position,
                      target: pointInfo.el,
                      event: {}
                  }, dispatchAction);
              }
          }
          else if (payload.x != null && payload.y != null) {
              // FIXME
              // should wrap dispatchAction like `axisPointer/globalListener` ?
              api.dispatchAction({
                  type: 'updateAxisPointer',
                  x: payload.x,
                  y: payload.y
              });
  
              this._tryShow({
                  offsetX: payload.x,
                  offsetY: payload.y,
                  position: payload.position,
                  target: api.getZr().findHover(payload.x, payload.y).target,
                  event: {}
              }, dispatchAction);
          }
      }