docs: function (url) {
        var _this2 = this;
  
        this.setupRouter();
  
        var router = _emberMetalProperty_get.get(this, 'router');
  
        var handleResolve = function () {
          // Resolve only after rendering is complete
          return new _emberRuntimeExtRsvp.default.Promise(function (resolve) {
            // TODO: why is this necessary? Shouldn't 'actions' queue be enough?
            // Also, aren't proimses supposed to be async anyway?
            _emberMetalRun_loop.default.next(null, resolve, _this2);
          });
        };
  
        var handleReject = function (error) {
          if (error.error) {
            throw error.error;
          } else if (error.name === 'TransitionAborted' && router.router.activeTransition) {
            return router.router.activeTransition.then(handleResolve, handleReject);
          } else if (error.name === 'TransitionAborted') {
            throw new Error(error.message);
          } else {
            throw error;
          }
        };
  
        // Keeps the location adapter's internal URL in-sync
        _emberMetalProperty_get.get(router, 'location').setURL(url);
  
        return router.handleURL(url).then(handleResolve, handleReject);
      }