2012-04-15 8 views
7

El código de abajo "se ve bien", que compila, pero no se ejecuta, en su defecto, con el mensaje de la consola:¿Cómo importo dart: html & dart: io en la misma clase?

Cannot load Dart script dart:io
Failed to load resource

Si comento hacia fuera del #import('dart:io');, mal creo, me sale un error de compilación, pero se inicia y no hasta que presiono el botón, obtengo el error de tiempo de ejecución:

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

... que se espera.

Así que mi pregunta es: ¿Cómo importo dart: html & dart: io en la misma clase?

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

Respuesta

10

dart:html es una biblioteca lado del cliente, mientras que dart:io es una biblioteca del lado del servidor. dart:html hace uso de las funciones del navegador, pero dart:io hace uso de características que están restringidas por la seguridad del navegador (como el acceso al sistema de archivos).

Puede ser que llegue el momento de utilizar dart:html en el servidor, con un navegador "burlado", que podría ser útil para pruebas de unidades y similares, pero no puede hacerlo todavía.

4

Respuesta corta, no se puede. Como Chris menciona, la biblioteca dart: io es solo para bibliotecas de servidor.

Veo que está intentando conectarse a un servicio HTTP en su aplicación HTML. Debería consultar la biblioteca HttpRequest. Aquí hay un enlace a ejemplos: 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(); 
} 

Hay una solicitud para unificar HttpRequest de dardo: html y HttpClient del dardo: io, ver http://code.google.com/p/dart/issues/detail?id=2677