为什么client.dart在路由中使用gotopath而不是处理?

时间:2016-02-20 21:11:30

标签: dart dart-pub dart-html

我要求修复使用dart开发chrome应用程序的软件中的问题。目前,chrome应用程序不能在我的mac osx中运行,我得到以下异常:

Uncaught Unhandled exception: 类'_InternalLinkedHashMap'没有实例方法'pushState'。

NoSuchMethodError: method not found: 'pushState'
Receiver: _LinkedHashMap len:0
Arguments: [null, "", "/index.html#events"]
#0      Object._noSuchMethod (dart:core-patch/object_patch.dart:42)
#1      Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
#2      Router._go (package:route/client.dart:153:22)
#3      Router.gotoPath (package:route/client.dart:139:7)
#4      Router.listen.<anonymous closure> (package:route/client.dart:111:13)
#5      wrap_event_listener.<anonymous closure>.<anonymous closure> (dart:html:1189)VM81:1 (anonymous function)

在我回溯问题后,我发现listen()函数而不是调用句柄调用gotoPath(string,string)。有人可以解释一下吗。这个原因

[https://github.com/justinfagnani/route/blob/master/lib/client.dart][1]

void gotoPath(String path, String title) {
    _logger.finest('gotoPath $path');
    var url = _getUrl(path);
    if (url != null) {
      _go(path, title);
      // If useFragment, onHashChange will call handle for us.
      if (!_listen || !useFragment) {
        _handlers[url](path);
      }
    }
  }

void handle(String path) {
    _logger.finest('handle $path');
    var url = _getUrl(path);
    if (url != null) {
      // always give handlers a non-fragment path
      var fixedPath = url.reverse(url.parse(path));
      _handlers[url](fixedPath);
    } else {
      _logger.info("Unhandled path: $path");
    }
  }
这是来自这里的电话: 请注意,其他方法如果/ else只调用handle!ignoreclick只调用gotopath

void listen({bool ignoreClick: false}) {
    _logger.finest('listen ignoreClick=$ignoreClick useFragment=$useFragment');
    if (_listen) {
      throw new StateError('listen should be called once.');
    }
    _listen = true;
    if (useFragment) {
      window.onHashChange.listen((_) {
        var path = '${window.location.pathname}${window.location.hash}';
        _logger.finest('onHashChange handle($path)');
        return handle(path);
      });
      handle('${window.location.pathname}${window.location.hash}');
    } else {
      window.onPopState.listen((_) {
        var path = '${window.location.pathname}${window.location.hash}';
        _logger.finest('onPopState handle($path)');
        handle(path);
      });
    }
    if (!ignoreClick) {
      window.onClick.listen((e) {
        if (e.target is AnchorElement) {
          AnchorElement anchor = e.target;
          if (anchor.host == window.location.host) {
            var fragment = (anchor.hash == '') ? '' : '${anchor.hash}';
            gotoPath("${anchor.pathname}$fragment", anchor.title);
            e.preventDefault();
          }
        }
      });
    }
  }

0 个答案:

没有答案