2011-10-10 3 views
93

Je comprends Dart compile à JavaScript, et j'ai lu le Dart Language Spec sur les bibliothèques, même si je n'ai pas vu une réponse là. En outre, une recherche sur leur discussion form pour le mot «existant» se traduit par 3 résultats qui ne sont pas liés.Est-ce que Dart supportera l'utilisation des bibliothèques JavaScript existantes?

Est-ce que quelqu'un sait si Dart supportera l'utilisation des bibliothèques JavaScript existantes telles que jQuery ou Raphael?

+1

bien que je poste la [question] (https://groups.google.com/a/dartlang.org/group/misc/browse_thread/thr ead/511a97cd362b4f08 #) maintenant. – TMB

Répondre

84

La réponse est maintenant Oui! Dart envoie maintenant une bibliothèque JS-interop pour utiliser le code JavaScript existant avec votre application Dart. En savoir plus ici: https://www.dartlang.org/articles/js-dart-interop/

+0

Merci pour la clarification, Seth! – jtmcdole

+0

@Seth J'ai eu une question de suivi. Est-ce que cela a vraiment du sens que vous utilisiez des librairies Javascript de Dart, quand Dart est là pour finalement remplacer Javascript? Et Dart a-t-il quelque chose de intégré pour la visualisation? –

+2

@AmitTomar la communauté ne peut pas immédiatement porter sur toutes les bibliothèques JS, il est donc logique d'utiliser la grande quantité de bibliothèques JS disponibles. En ce qui concerne les graphiques (visualisation), je ne connais que l'interopérabilité avec les bibliothèques basées sur JS. –

3

Voir ce fil sur le forum de discussion: Calling old javascript code.

+1

ils font référence au mot clé natif, mais je ne trouve pas cela dans la référence de la bibliothèque ou la spécification de la langue. – TMB

14

Vous ne serez pas en mesure d'appeler javascript directement à partir du code dart. La directive native est réservée aux bibliothèques de base de dartc (dart: core, dart: dom, dart: html, dart: json, etc), qui elle-même compile en javascript.

+0

avez-vous une référence pour cela? – TMB

+6

Je travaille sur l'équipe dartc et en interne il est question de restreindre la directive native et le mot-clé à dart: les bibliothèques seulement. Vous pouvez certainement regarder toutes les fonctions de base (par exemple isolate.dart & isolate.js) et voir que l'ajout du mot clé "native" à une signature de fonction (note: aucun corps dans la version Dart) vous permettra d'appeler une fonction javascript tronquée; mais nous ne faisons aucune promesse que nous ne vous briserons pas dans le futur. – jtmcdole

+6

Je comprends et respecte l'idéal de donner au Web un langage propre et réfléchi, mais je vous prie d'envisager une couche d'interopérabilité. Microsoft en a fourni un de Com à .Net pour s'assurer que les projets puissent être migrés de manière incrémentielle. Cela n'a pas empêché le succès de .Net du tout; Je crois que cela a aidé à son adoption, bien qu'ils l'aient améliorée avec le temps. Si la rupture est quelque chose qui vous préoccupe sérieusement, envisagez un programme sur invitation pour les principales bibliothèques telles que jQuery, MooTools et script.aculo.us. Je vous remercie. – TMB

2

Il existe également une bibliothèque dart:js. Et voici an article expliquant comment utiliser cette bibliothèque pour interopérer avec JavaScript.

+0

Notez que le lien est inexact. Dart/JS qui fait partie des bibliothèques de fléchettes principales est beaucoup plus facile et plus propre à utiliser pour l'interface de javascript. Je ne vois rien d'officiel sur le sujet, mais cela fait partie du SDK: https://api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html – BeatingToADifferentRobot

6

Il y a maintenant une nouvelle façon plus simple https://pub.dartlang.org/packages/js (actuellement la version 0.6.0-beta.6)

Faire des classes JS et fonctions disponibles à Dart comme:

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

pour plus voir le readme du paquet

Questions connexes