docs: function (graphicModel) {
          var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();
  
          if (!elOptionsToUpdate) {
              return;
          }
  
          var elMap = this._elMap;
          var rootGroup = this.group;
  
          // Top-down tranverse to assign graphic settings to each elements.
          zrUtil.each(elOptionsToUpdate, function (elOption) {
              var $action = elOption.$action;
              var id = elOption.id;
              var existEl = elMap.get(id);
              var parentId = elOption.parentId;
              var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;
  
              var elOptionStyle = elOption.style;
              if (elOption.type === 'text' && elOptionStyle) {
                  // In top/bottom mode, textVerticalAlign should not be used, which cause
                  // inaccurately locating.
                  if (elOption.hv && elOption.hv[1]) {
                      elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null;
                  }
  
                  // Compatible with previous setting: both support fill and textFill,
                  // stroke and textStroke.
                  !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (
                      elOptionStyle.textFill = elOptionStyle.fill
                  );
                  !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (
                      elOptionStyle.textStroke = elOptionStyle.stroke
                  );
              }
  
              // Remove unnecessary props to avoid potential problems.
              var elOptionCleaned = getCleanedElOption(elOption);
  
              // For simple, do not support parent change, otherwise reorder is needed.
              if (__DEV__) {
                  existEl && zrUtil.assert(
                      targetElParent === existEl.parent,
                      'Changing parent is not supported.'
                  );
              }
  
              if (!$action || $action === 'merge') {
                  existEl
                      ? existEl.attr(elOptionCleaned)
                      : createEl(id, targetElParent, elOptionCleaned, elMap);
              }
              else if ($action === 'replace') {
                  removeEl(existEl, elMap);
                  createEl(id, targetElParent, elOptionCleaned, elMap);
              }
              else if ($action === 'remove') {
                  removeEl(existEl, elMap);
              }
  
              var el = elMap.get(id);
              if (el) {
                  el.__ecGraphicWidth = elOption.width;
                  el.__ecGraphicHeight = elOption.height;
                  setEventData(el, graphicModel, elOption);
              }
          });
      }