2012-04-15 18 views
7

Il codice di seguito "guarda a destra", si compila, ma non viene eseguito, non riuscendo con il messaggio console:Come posso importare dart: html e dart: io nella stessa classe?

Cannot load Dart script dart:io
Failed to load resource

Se commento fuori la #import('dart:io');, sbagliato io credo, ottengo un errore di compilazione, ma si avvia e non finché non preme il pulsante, ottengo l'errore di runtime:

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, '/');

... che è previsto.

Quindi la mia domanda è: come posso importare dart: html & dart: io nella stessa classe?

#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(); 
} 

risposta

10

dart:html è una libreria lato client, mentre dart:io è una libreria lato server. dart:html utilizza le funzionalità del browser, ma lo standard dart:io si avvale di funzionalità limitate dalla sicurezza del browser (ad esempio l'accesso al file system e così via).

può essere che arriva il momento che è possibile utilizzare dart:html sul server, con un browser "deriso", che potrebbe essere utile per i test di unità e simili, ma non si può fare ancora.

4

Risposta breve, non è possibile. Come cita Chris, la libreria dart: io è solo per librerie di server.

Vedo che stai tentando di connettersi a un servizio HTTP nella tua app HTML. Dovresti controllare la libreria HttpRequest. Ecco un link a esempi: 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(); 
} 

C'è una richiesta di unificare HttpRequest dal dardo: html e HttpClient dal dardo: io, vedi http://code.google.com/p/dart/issues/detail?id=2677