code: function dispatch(ctx) {
  
          if (_curCtx) {
              var ret = _curCtx.route.exit({
                  path: _curCtx.path,
                  params: _curCtx.params
              }, true);
              if (!ret) {
                  return;
              }
          }
  
          _prevCtx = _curCtx;
          _curCtx = ctx;
          if (!_curCtx.route) {
              var m = map(_curCtx.path);
              _curCtx.route = m.route;
              _curCtx.params = m.params;
          }
  
          var r = _curCtx.route.enter({
              force: _curCtx.force,
              path: _curCtx.path,
              params: _curCtx.params
          },true);
  
          langx.Deferred.when(r).then(function() {
              _hub.trigger(createEvent("routing", {
                  current: _curCtx,
                  previous: _prevCtx
              }));
  
              _curCtx.route.enter({
                  path: _curCtx.path,
                  params: _curCtx.params
              },false);
  
              if (_prevCtx) {
                  _prevCtx.route.exit({
                      path: _prevCtx.path,
                      params: _prevCtx.params
                  }, false);
              }
  
              _hub.trigger(createEvent("routed", {
                  current: _curCtx,
                  previous: _prevCtx
              }));
          });
      }
docs: refresh the current route