2012-08-11 20 views
5

Próbuję dynamicznie załadować skrypt dart za pomocą dart. Używam coś takiego:Załaduj skrypt dart dynamicznie za pomocą strzałki

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

to nie działa. Jednak gdybym inline ten sam kod w pliku HTML, to działa dobrze:

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

Dlaczego tak się dzieje?

+0

Wygląda jak błąd. Może powinieneś dodać problem na [dartbug] (http://www.dartbug.com) –

+0

Zgadzam się. Obecnie Dart nie może być ładowany przez ScriptElement() (to jest ładowanie javascript i nawet ta interakcja jest bardzo wysoko w powietrzu). Obecnie podstawowym sposobem ładowania kodu dart jest Isolate.spawnURI() –

+0

@MattB: Widziałem, że możliwe jest wstawienie kodu dart: http://www.dartlang.org/articles/embedding-in-html/ i działa ! –

Odpowiedz

1

To był błąd w Dart. Oto link do bug report.

+0

Wygląda na to, że izolaty są jedynym obsługiwanym sposobem dynamicznego ładowania kodu Dart. – tjameson

0

Czy używasz tego w Dartium (jako Dart) lub w innej przeglądarce (jako JavaScript)? Przejmę to drugie. Jeśli spojrzysz na (http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js), szuka tagów skryptów, takich jak foo.dart i automatycznie ładuje foo.dart.js. Robi to w wywołaniu zwrotnym window.addEventListener ("DOMContentLoaded", function (e) {...}). To wywołanie zwrotne ma miejsce przed kodem, który dynamicznie dodaje znacznik skryptu.

W związku z tym można załadować plik helloworld.dart.js w swoim kodzie, a co za tym idzie (http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js) tak czy inaczej . Zauważ jednak, że Dart, najlepiej, traktuje każdy znacznik skryptu jako oddzielny izolat - to nie jest jak JavaScript.

Powiązane problemy