2012-04-15 5 views
7

Der folgende Code „gut aussieht“, kompiliert, aber nicht ausgeführt, mit der Konsole Nachricht Fehlern:Wie importiere ich dart: html & dart: io in derselben Klasse?

Cannot load Dart script dart:io
Failed to load resource

Wenn ich die #import('dart:io'); Kommentar aus, falsch, ich glaube, ich bekomme einen Übersetzungsfehler, aber es Kutter und nicht, bis ich die Taste drücken, kann ich den Laufzeitfehler erhalten:

Internal error: 'http://127.0.0.1:3030/home/david/dart/samples/htmlIO/htmlIO.dart': Error: line 13 pos 26: type 'HttpClient' is not loaded
var connection = new HttpClient().get('www.google.com', 80, '/');

... was erwartet wird.

Also meine Frage ist: Wie importiere ich dart: html & dart: io in der gleichen Klasse?

#import('dart:html'); 
#import('dart:io'); 

class htmlIO { 

    ButtonElement _aButton; 

    htmlIO() { 
    } 

    void handlePress(Event e) { 
    var connection = new HttpClient().get('www.google.com', 80, '/'); 
    write('made it'); 
    } 

    void run() { 
    _aButton = document.query("#aButton"); 
    _aButton.on.click.add(handlePress); 
    write("Hello World!"); 
    } 

    void write(String message) { 
    // the HTML library defines a global "document" variable 
    document.query('#status').innerHTML = message; 
    } 
} 

void main() { 
    new htmlIO().run(); 
} 

Antwort

10

dart:html ist eine Seiten Bibliothek Client, während dart:io eine serverseitige Bibliothek ist. dart:html nutzt Funktionen des Browsers, aber dart:io nutzt Funktionen, die durch die Browser-Sicherheit (z. B. Dateisystemzugriff und so weiter) eingeschränkt sind.

Es kann sein, dass die Zeit kommt, dass Sie dart:html auf dem Server verwenden können, mit einem "mocked" Browser, der für Komponententests und dergleichen nützlich sein könnte, aber Sie können das noch nicht tun.

4

Kurze Antwort, können Sie nicht. Wie Chris erwähnt, ist dart: io library nur für Server-Bibliotheken.

Ich sehe, dass Sie versuchen, eine Verbindung zu einem HTTP-Dienst in Ihrer HTML-App herzustellen. Sie sollten die HttpRequest-Bibliothek auschecken. Hier ist ein Link auf die Beispiele: http://c.dart-examples.com/api/dart-html/interface/eventtarget/httprequest/asynchronous

import 'dart:html'; 
import 'dart:convert'; 

void onSuccess(ProgressEvent event, HttpRequest request) { 
    print(event.loaded); // 0 
    print(request.statusText); // ok 
    print(request.responseText); // "(resource text)" 
} 

/** 
* test.txt file must be of the same origin 
* Or the response header must contain "Access-Control-Allow-Origin: [*|origin]" 
*/ 
void main() { 
    String url = "test.txt"; 
    HttpRequest request = new HttpRequest(); 
    request.open("GET", url, async : true); 
    request.onLoadEnd.listen((ProgressEvent e) => onSuccess(e, request)); 
    request.send(); 
} 

Es gibt eine Anfrage zu vereinen Httprequest von dart: html und Httpclient von dart: io, siehe http://code.google.com/p/dart/issues/detail?id=2677