Updating --------- Default is to process the `attrs` object and set attributes on subelements based on the selectors.
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;
    }