Wird Dart die Verwendung vorhandener JavaScript-Bibliotheken unterstützen?

107

Ich verstehe, dass Dart in JavaScript kompiliert wird, und habe die Dart-Sprachspezifikation für Bibliotheken gelesen , obwohl ich dort keine Antwort gesehen habe. Auch eine Suche in ihrem Diskussionsformular nach dem Wort "vorhanden" ergibt 3 Ergebnisse, die nicht miteinander zusammenhängen.

Weiß jemand, ob Dart die Verwendung vorhandener JavaScript-Bibliotheken wie jQuery oder Raphael unterstützt?

TMB
quelle
1
obwohl ich die Frage jetzt poste .
TMB

Antworten:

95

Die Antwort lautet jetzt Ja! Dart liefert jetzt eine JS-Interop-Bibliothek aus, um vorhandenen JavaScript-Code mit Ihrer Dart-App zu verwenden. Erfahren Sie hier mehr: https://www.dartlang.org/articles/js-dart-interop/

Seth Ladd
quelle
Danke für die Klarstellung, Seth!
jtmcdole
@ Seth Ich hatte eine Folgefrage. Ist es wirklich sinnvoll, Javascript-Bibliotheken von Dart zu verwenden, wenn Dart da ist, um Javascript endgültig zu ersetzen? Und hat Dart etwas für die Visualisierung eingebaut?
Amit Tomar
2
@AmitTomar Die Community kann nicht sofort alle JS-Bibliotheken portieren. Daher ist es sinnvoll, die große Anzahl an JS-Bibliotheken zu verwenden. Was das Charting (Visualisierung) betrifft, ist mir nur die Interaktion mit JS-basierten Bibliotheken bekannt.
Seth Ladd
@ SethLadd Danke Seth, das war hilfreich.
Amit Tomar
Danke Seth, ich zeige auch, wie man es in diesem Artikel benutzt .
Grafikbeacon
14

Sie können Javascript nicht direkt aus dem Dartcode aufrufen. Die native Direktive ist für die Kernbibliotheken von dartc (dart: core, dart: dom, dart: html, dart: json usw.) reserviert, die selbst zu Javascript kompiliert werden.

jtmcdole
quelle
Haben Sie eine Referenz dafür?
TMB
6
Ich arbeite im dartc-Team und intern wird darüber gesprochen, die native Direktive und das Schlüsselwort nur auf dart: library zu beschränken. Sie können sich sicherlich alle Kernfunktionen ansehen (z. B. isolate.dart & isolate.js) und feststellen, dass Sie durch Anhängen des Schlüsselworts "native" an eine Funktionssignatur (Hinweis: kein Text in der Dart-Version) eine verstümmelte Javascript-Funktion aufrufen können. aber wir machen kein Versprechen, dass wir Sie in Zukunft nicht brechen werden.
jtmcdole
6
Ich verstehe und respektiere das Ideal, dem Web eine saubere und durchdachte Sprache zu geben, aber ich bitte Sie, eine Interop-Ebene in Betracht zu ziehen. Microsoft hat eine von Com zu .Net bereitgestellt, um sicherzustellen, dass Projekte schrittweise migriert werden können. Dies hat den Erfolg von .Net überhaupt nicht behindert. Ich glaube, es hat seiner Annahme geholfen, obwohl sie es mit der Zeit verbessert haben. Wenn das Brechen ein ernstes Problem darstellt, sollten Sie ein Einladungsprogramm für wichtige Bibliotheken wie jQuery, MooTools und script.aculo.us in Betracht ziehen. Danke dir.
TMB
2
Ich lade Sie ein, über unseren Issue-Tracker @ -Link eine Funktionsanfrage zu stellen . Ich glaube nicht, dass diese Entscheidung in Stein gemeißelt wurde.
jtmcdole
1
Ich
möchte
7

Es gibt jetzt einen neuen einfacheren Weg https://pub.dartlang.org/packages/js (derzeit Version 0.6.0-beta.6)

Stellen Sie Dart JS-Klassen und -Funktionen wie folgt zur Verfügung:

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

Weitere Informationen finden Sie in der Readme-Datei des Pakets

Günter Zöchbauer
quelle
3

Siehe diesen Thread aus dem Diskussionsforum: Aufrufen von altem Javascript-Code .

Lukas Renggli
quelle
1
Sie verweisen auf das native Schlüsselwort, aber ich kann das nicht in der Bibliotheksreferenz oder in der Sprachspezifikation finden.
TMB
3

Es gibt auch eine dart:jsBibliothek. In diesem Artikel wird erläutert, wie diese Bibliothek für die Interaktion mit JavaScript verwendet wird.

Shailen Tuli
quelle
Beachten Sie, dass der Link ungenau ist. Dart / JS, das Teil der Haupt-Dart-Bibliotheken ist, ist viel einfacher und sauberer zu verwenden, um eine Schnittstelle zu Javascript herzustellen. Ich sehe nichts offizielles zu diesem Thema, aber es ist Teil des SDK: api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html
BeatingToADifferentRobot