2012-08-11 11 views
5

Estoy intentando cargar un script de dart dinámicamente utilizando dart. Estoy usando algo como esto:Cargue un script de dart dinámicamente con dardo

test.html:

... 
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script> 
<script type="application/dart" src="test.dart"></script> 
... 

test.dart:

#import('dart:html'); 
main() { 
    var script = new ScriptElement(); 
    script.type = 'application/dart'; 
    script.src = 'helloworld.dart'; 
    document.body.elements.add(script); 
} 

No funciona. Sin embargo, si en línea el mismo código en el archivo HTML, que funciona bien:

test.html:

... 
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script> 
<script type="application/dart"> 
#import('dart:html'); 
main() { 
    var script = new ScriptElement(); 
    script.type = 'application/dart'; 
    script.src = 'helloworld.dart'; 
    document.body.elements.add(script); 
} 
</script> 
... 

Por qué sucede esto?

+0

Parece un error. Tal vez deberías agregar un problema en [dartbug] (http://www.dartbug.com) –

+0

Estoy de acuerdo. Actualmente, Dart no debe poder cargarse a través de ScriptElement() (esto es para cargar javascript e incluso esa intercomunicación está muy en el aire). Actualmente, la forma principal de cargar el código del dardo es con Isolate.spawnURI() –

+0

@MattB: vi que es posible codificar el dardo en línea: http://www.dartlang.org/articles/embedding-in-html/ y funciona ! –

Respuesta

1

Esto fue un error en Dart. Aquí hay un enlace al bug report.

+0

Parece que los aislados son la única forma admitida de cargar dinámicamente el código Dart. – tjameson

0

¿Está ejecutando esto en Dartium (como Dart) o en otro navegador (como JavaScript)? Voy a suponer lo último. Si observa (http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js), busca etiquetas de script como foo.dart y carga automáticamente foo.dart.js. Lo hace en una devolución de llamada window.addEventListener ("DOMContentLoaded", function (e) {...}). Esa devolución de llamada ocurre antes de su código que agrega dinámicamente una etiqueta de script.

Por lo tanto, puede cargar helloworld.dart.js en su código, que es lo que (http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js) haría de todos modos . Sin embargo, tenga en cuenta que, idealmente, Dart intenta tratar cada etiqueta de script como un aislado por separado, no es como JavaScript.

Cuestiones relacionadas