2013-06-20 3 views
1

링크가있는 페이지가 있습니다. 이 링크는 모두 같은 방식으로 끝납니다. 예를 들어 www.site.com/fruit/apples, www.site.com/fruit/bananas, www.site.com/fruit/oranges 등. 나는이 모든 링크가 동일한 다트 응용 프로그램을 호출하고 응용 프로그램에서 일부 처리를 수행 한 다음 바나나 페이지 대 오렌지 페이지와 같이 갈 필요가있는 곳으로 리디렉션하도록합니다. 이렇게하면 모든 과일에 대해 실제 HTML 파일을 사용하지 않아도됩니다. 대신 변수 과일 데이터로 채워지는 단일 방문 템플릿을 사용할 수 있습니다.다트 앱에 URL 전달

내가 처리 할 부분은 처리를 할 수 있도록 다트 앱에 URL을 전달하는 부분입니다. main()이 인수를받을 수 없다는 것을 이해합니다. 다른 방법은 무엇입니까?

답변

2

route package을 사용하면 URL을 처리 할 수 ​​있습니다.

예를 들어

: 당신이 실제 경로를 처리 할 필요가 없습니다, 당신은 단지 형태 ?fruit=apple의 전달 된 쿼리 매개 변수를 처리하려면

import 'package:route/client.dart'; 

final fruitUrl = new UrlPattern(r'/fruit/(\w+)'); 

main() { 
    var router = new Router() 
    ..addHandler(fruitUrl, showFruit) 
    ..listen(); 
} 

void showFruit(String path) { 
    var fruit = fruitUrl.parse(req.path)[0]; 
    // Display the page according to the fruit type 
} 

것은 당신이 루트 패키지를 사용하지 않고 대신 수동으로 URL을 구문 분석 할 수 있습니다.

Map params = {}; 

// If arguments were provided, decode them into params map 
if(window.location.search.length > 1) { 
    // Break all arguments into form: fruit=apple 
    List<String> queryPairs = window.location.search.substring(1).split('&'); 
    for(String queryPair in queryPairs) { 
    // Add arguments into params map: key=fruit, value=apple 
    List<String> queryPairList = queryPair.split('='); 
    params[queryPairList[0]] = queryPairList[1]; 
    } 
} 

// Handle the proper action based on the fruit 
switch(params['fruit']) { 
    case 'apple': 
    // ... 
    break; 
    // ... 
    case 'orange': 
    // ... 
    break; 
} 
+0

'예외 발생 : 잘못된 인수 :/web/out/entry_page.html'에 대한 처리기가 없습니다. 나는 Dart 편집기와 웹 서버에서 테스트를하고있다. 같은 오류. – jmoneystl

+0

내가 제공 한 코드는/fruit로 시작하는 URL 만 처리합니다. entry_page.html을 처리하기 위해 다른 핸들러를 추가해야합니다 (새 UrlPattern을 추가하는 메소드, 처리 할 메소드 및 바인드 할 라우터 핸들러). 또한 경로를 테스트 할 때만 웹 서버를 사용하십시오. 제대로 작동하지 않는 Dart Editor에 문제가 있으므로 (Dart Editor는 지정된 경로와 일치하지 않는 로컬 파일 시스템 경로의 파일을 제공합니다). –

+0

제가 진정으로 진정으로 추구하는 것은? fruit = style 쿼리를 구문 분석하는 방법입니다. 전에는 분명히 했어야했는데, 논리가 같다고 생각하지만, 정규식은 다릅니다. 나는 그 예외를 벗어날 수 없다. 나는 "deploy"를 할 때 route 패키지가 deploy/out 폴더에 나타나지 않는다는 것을 알았다. 이 일과 관련이 있다면 몰라. – jmoneystl