Czy Dart będzie obsługiwać istniejące biblioteki JavaScript?

108

Rozumiem, że Dart kompiluje się do JavaScript i przeczytałem specyfikację języka Dart w bibliotekach, chociaż nie widziałem tam odpowiedzi. Również wyszukiwanie w ich formularzu dyskusji słowa „istniejący” daje 3 niepowiązane wyniki.

Czy ktoś wie, czy Dart będzie wspierać korzystanie z istniejących bibliotek JavaScript, takich jak jQuery czy Raphael?

TMB
źródło
1
chociaż teraz zadaję pytanie .
TMB

Odpowiedzi:

96

Odpowiedź brzmi teraz: tak! Dart dostarcza teraz bibliotekę JS-interop do używania istniejącego kodu JavaScript z aplikacją Dart. Dowiedz się więcej tutaj: https://www.dartlang.org/articles/js-dart-interop/

Seth Ladd
źródło
Dzięki za wyjaśnienie, Seth!
jtmcdole
@Seth Mam dodatkowe pytanie. Czy naprawdę ma sens używanie bibliotek Javascript firmy Dart, kiedy Dart jest w stanie w końcu zastąpić Javascript? I czy Dart ma coś wbudowanego do wizualizacji?
Amit Tomar
2
@AmitTomar społeczność nie może natychmiast przenieść wszystkich bibliotek JS, więc sensowne jest korzystanie z ogromnej ilości bibliotek JS. Jeśli chodzi o wykresy (wizualizacje), jestem świadomy tylko współpracy z bibliotekami opartymi na JS.
Seth Ladd
@SethLadd Thanks Seth, to było pomocne.
Amit Tomar
Dzięki Seth, w tym artykule pokazuję również, jak go używać .
graphicbeacon
15

Nie będziesz w stanie wywołać javascript bezpośrednio z kodu rzutki. Natywna dyrektywa jest zarezerwowana dla podstawowych bibliotek dartc (dart: core, dart: dom, dart: html, dart: json itp.), Które same kompilują się do javascript.

jtmcdole
źródło
czy masz do tego odniesienie?
TMB
6
Pracuję w zespole dartc i wewnętrznie dyskutuje się o ograniczeniu natywnej dyrektywy i słowa kluczowego do dart: libraries. Z pewnością możesz przyjrzeć się podstawowym funkcjom (np. Isolate.dart i isolate.js) i przekonać się, że dodanie słowa kluczowego „native” do sygnatury funkcji (uwaga: brak treści w wersji Dart) umożliwi wywołanie zniekształconej funkcji javascript; ale nie obiecujemy, że nie złamiemy Cię w przyszłości.
jtmcdole
6
Rozumiem i szanuję ideał nadania sieci czystego i przemyślanego języka, ale błagam Cię o rozważenie warstwy międzyoperacyjnej. Microsoft dostarczył jeden z Com do .Net, aby zapewnić, że projekty mogą być migrowane stopniowo. To wcale nie przeszkodziło w sukcesie .Net; Myślę, że pomogło to w jego przyjęciu, chociaż z czasem go poprawili. Jeśli zepsuty jest czymś, co budzi poważne obawy, rozważ program zapraszający dla głównych bibliotek, takich jak jQuery, MooTools i script.aculo.us. Dziękuję Ci.
TMB
2
Zapraszam do zgłaszania propozycji funkcji za pośrednictwem naszego trackera problemów @ link . Nie wierzę, że ta decyzja została jeszcze odrzucona.
jtmcdole
1
Zwracam
8

Jest teraz nowy, prostszy sposób https://pub.dartlang.org/packages/js (obecnie wersja 0.6.0-beta.6)

Udostępnij klasy i funkcje JS dla Dart, takie jak:

@JS("JSON.stringify")
external String stringify(obj);
@JS('google.maps')
library maps;

// Invokes the JavaScript getter `google.maps.map`.
external Map get map;

// `new Map` invokes JavaScript `new google.maps.Map(location)`
@JS()
class Map {
  external Map(Location location);
  external Location getLocation();
}

// `new Location(...)` invokes JavaScript `new google.maps.LatLng(...)`
//
// We recommend against using custom JavaScript names whenever
// possible. It is easier for users if the JavaScript names and Dart names
// are consistent.
@JS("LatLng")
class Location {
  external Location(num lat, num lng);
}

więcej informacji znajdziesz w pliku Readme pakietu

Günter Zöchbauer
źródło
4

Zobacz ten wątek na forum dyskusyjnym: Calling old javascript code .

Lukas Renggli
źródło
1
odwołują się do natywnego słowa kluczowego, ale nie mogę go znaleźć w Odniesieniu do biblioteki ani w specyfikacji języka.
TMB
4

Jest też dart:jsbiblioteka. A oto artykuł wyjaśniający, jak używać tej biblioteki do współpracy z JavaScript.

Shailen Tuli
źródło
1
Zwróć uwagę, że link jest niedokładny. Dart / JS, który jest częścią głównych bibliotek dart, jest znacznie łatwiejszy i bardziej przejrzysty w użyciu w interfejsie do javascript. Nie widzę nic oficjalnego na ten temat, ale jest to część SDK: api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html
BeatingToADifferentRobot