2012-08-11 7 views
5

Ich versuche, ein Dart-Skript dynamisch mit Dart zu laden. Ich verwende etwas wie folgt aus:Laden Sie ein Dart-Skript dynamisch mit Dart

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

Es funktioniert nicht. Allerdings, wenn ich den gleichen Code in der HTML-Datei inline, es funktioniert gut:

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> 
... 

Warum ist das passiert?

+0

Es sieht aus wie ein Fehler. Vielleicht sollten Sie ein Problem auf [Dartbug] hinzufügen (http://www.dartbug.com) –

+0

Ich stimme zu. Momentan sollte Dart nicht über das ScriptElement() ladbar sein (das ist JavaScript zu laden und sogar diese Interkommunikation ist sehr hoch in der Luft). Derzeit ist der primäre Weg zum Laden von Dart-Code mit Isolate.spawnURI() –

+0

@MattB: Ich sah, dass es möglich ist, Dart-Code inline: http://www.dartlang.org/articles/embbedding-in-html/ und es funktioniert ! –

Antwort

1

Dies war ein Fehler in Dart. Hier ist ein Link zu der bug report.

+0

Scheint, dass Isolate die einzige unterstützte Methode zum dynamischen Laden von Dart-Code sind. – tjameson

0

Betreiben Sie dies in Dartium (als Dart) oder in einem anderen Browser (als JavaScript)? Ich werde das letztere annehmen. Wenn Sie sich (http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js) ansehen, sucht es nach Skript-Tags wie foo.dart und lädt automatisch foo.dart.js. Dies geschieht in einem window.addEventListener ("DOMContentLoaded", function (e) {...}) Callback. Dieser Rückruf erfolgt vor Ihrem Code, der dynamisch ein Skript-Tag hinzufügt.

Daher könnten Sie helloworld.dart.js stattdessen in Ihrem Code laden, was (http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js) sowieso tun würde . Beachten Sie jedoch, dass Dart idealerweise versucht, jedes Skript-Tag als separates Isolat zu behandeln - es ist nicht wie JavaScript.