whole_func_string: function() {
  
          // Update attributes.
          _.each(this.model.get('attrs'), function(attrs, selector) {
              
              // If the `filter` attribute is an object, it is in the special JointJS filter format and so
              // it becomes a special attribute and is treated separately.
              if (_.isObject(attrs.filter)) {
                  
                  this.findBySelector(selector).attr(_.omit(attrs, 'filter'));
                  this.applyFilter(selector, attrs.filter);
                  
              } else {
                  
                  this.findBySelector(selector).attr(attrs);
              }
          }, this);
  
          var vertices = this.model.get('vertices');
  
          if (this.model.get('manhattan')) {
              // If manhattan routing is enabled, find new vertices so that the link is orthogonally routed.
              vertices = this.findManhattanRoute(vertices);
          }
  
          this._firstVertex = _.first(vertices);
          this._sourcePoint = this.getConnectionPoint(
              'source',
              this.model.get('source'),
              this._firstVertex || this.model.get('target')).round();
  
          this._lastVertex = _.last(vertices);
          this._targetPoint = this.getConnectionPoint(
              'target',
              this.model.get('target'),
              this._lastVertex || this._sourcePoint
          );
  
          // Make the markers "point" to their sticky points being auto-oriented towards
          // `targetPosition`/`sourcePosition`. And do so only if there is a markup for them.
          if (this._V.markerSource) {
              this._V.markerSource.translateAndAutoOrient(
                  this._sourcePoint,
                  this._firstVertex || this._targetPoint,
                  this.paper.viewport
              );
          }
  
          if (this._V.markerTarget) {
              this._V.markerTarget.translateAndAutoOrient(
                  this._targetPoint,
                  this._lastVertex || this._sourcePoint,
                  this.paper.viewport
              );
          }
  
          var pathData = this.getPathData(vertices);
          // The markup needs to contain a `.connection`
          this._V.connection.attr('d', pathData);
          this._V.connectionWrap && this._V.connectionWrap.attr('d', pathData);
  
          //partials updates
          this.updateLabelPositions();
          this.updateToolsPosition();
          this.updateArrowheadMarkers();
  
          return this;
      }
func_code_string: function() {
  
          // Update attributes.
          _.each(this.model.get('attrs'), function(attrs, selector) {
              
              // If the `filter` attribute is an object, it is in the special JointJS filter format and so
              // it becomes a special attribute and is treated separately.
              if (_.isObject(attrs.filter)) {
                  
                  this.findBySelector(selector).attr(_.omit(attrs, 'filter'));
                  this.applyFilter(selector, attrs.filter);
                  
              } else {
                  
                  this.findBySelector(selector).attr(attrs);
              }
          }, this);
  
          var vertices = this.model.get('vertices');
  
          if (this.model.get('manhattan')) {
              // If manhattan routing is enabled, find new vertices so that the link is orthogonally routed.
              vertices = this.findManhattanRoute(vertices);
          }
  
          this._firstVertex = _.first(vertices);
          this._sourcePoint = this.getConnectionPoint(
              'source',
              this.model.get('source'),
              this._firstVertex || this.model.get('target')).round();
  
          this._lastVertex = _.last(vertices);
          this._targetPoint = this.getConnectionPoint(
              'target',
              this.model.get('target'),
              this._lastVertex || this._sourcePoint
          );
  
          // Make the markers "point" to their sticky points being auto-oriented towards
          // `targetPosition`/`sourcePosition`. And do so only if there is a markup for them.
          if (this._V.markerSource) {
              this._V.markerSource.translateAndAutoOrient(
                  this._sourcePoint,
                  this._firstVertex || this._targetPoint,
                  this.paper.viewport
              );
          }
  
          if (this._V.markerTarget) {
              this._V.markerTarget.translateAndAutoOrient(
                  this._targetPoint,
                  this._lastVertex || this._sourcePoint,
                  this.paper.viewport
              );
          }
  
          var pathData = this.getPathData(vertices);
          // The markup needs to contain a `.connection`
          this._V.connection.attr('d', pathData);
          this._V.connectionWrap && this._V.connectionWrap.attr('d', pathData);
  
          //partials updates
          this.updateLabelPositions();
          this.updateToolsPosition();
          this.updateArrowheadMarkers();
  
          return this;
      }
func_documentation_string: Updating --------- Default is to process the `attrs` object and set attributes on subelements based on the selectors.