Dart和http://pub.dartlang.org/packages/route

时间:2013-05-06 15:49:05

标签: routes dart

我已经开始尝试使用Dart和Route包http://pub.dartlang.org/packages/route

立即出现了两个问题:

1)当用户将浏览器指向不应该存在的URL时(例如,通过给出错误的散列片段),是否有可能(以及什么是惯用方式)定义回退路由。在示例代码中,路由框架只引发ArgumentError("No handler found for $path")

2)dart编辑器不在根路径/处提供已编译的应用程序,而是在从文件系统目录派生的路径下提供服务。这使得测试路径框架成为可能。是否可以在localhost:3030/下面提供应用程序?

2 个答案:

答案 0 :(得分:2)

点2:
你可以像跟随吗? :
url的变量部分由' window.location.pathname '设置;

library urls;

import 'dart:html';
import 'package:route/client.dart';

final String _pathName = window.location.pathname;

final UrlPattern _base = new UrlPattern("${_pathName}");
final UrlPattern home = new UrlPattern("${_pathName}#home");
final UrlPattern page2 = new UrlPattern("${_pathName}#page2");

// useFragment: true is important! allow keep '#" un url
// allow to bookmark be valid when browser is closed and reopen.
final Router router = new Router(useFragment: true)
        // simple hack to redirect / to /#home (home UrlPattern)
        ..addHandler(_base, (_) => window.location.hash = "#home");

main() {
  router..addHandler(home, showHome)
        ..addHandler(page2, showPage2)
        ..listen();
}

void showHome(String path) {
  query("body").children
          ..clear()


    ..add(new Element.html("<h1>Home</H1>"));
}

void showPage2(String path) {
  query("body").children
          ..clear()
          ..add(new Element.html("<h1>Page2</H1>"));
}

答案 1 :(得分:1)

1)我不知道有什么好办法。你可以监听每个网址(。*),然后手动检查$ path是否与其他网址匹配,但这有点混乱:

 var homeUrl = new UrlPattern(r'/home');
 var contactUrl = new UrlPattern(r'/contact');

 var router = new Router()
   ..addHandler(new url.UrlPattern(r'(.*)'), matchPages)
   ..listen();

 void matchPages(String path) {
   if(homeUrl.matches(path)) {
     // Handle home page display
   } else if(contactUrl.matches(path)) {
     // Contact page
   } else {
     // No match, handle it how you wish
   }
 }

在客户端上使用内置的处理默认路由的方式会很不错。

2)Justin Fagnani(Route包的作者)points out你可以从一个单独的网络服务器(即不是Dart编辑器提供的服务器)提供你的应用程序,或者使用一个与文件系统匹配的路由路径:(。*)#article将正确匹配文章,无论URL是localhost:3030 /#article还是C:/ Dart / app / web // out /#article。在Github上有一个未解决的问题:https://github.com/dart-lang/route/issues/31