2011-10-10 10 views
93

Entiendo que Dart compila en JavaScript, y leí el Dart Language Spec en Bibliotecas, aunque no vi una respuesta allí. También una búsqueda en su discussion form para la palabra 'existente' muestra 3 resultados que no están relacionados.Will Dart admite el uso de bibliotecas de JavaScript existentes?

¿Alguien sabe si Dart apoyará el uso de bibliotecas JavaScript existentes como jQuery o Raphael?

+1

aunque publico la [pregunta] (https://groups.google.com/a/dartlang.org/group/misc/browse_thread/thr ead/511a97cd362b4f08 #) ahora. – TMB

Respuesta

84

¡La respuesta ahora es Sí! Dart ahora envía una biblioteca de interoperabilidad JS para usar el código JavaScript existente con su aplicación Dart. Obtenga más información aquí: https://www.dartlang.org/articles/js-dart-interop/

+0

Gracias por la aclaración, Seth! – jtmcdole

+0

@Seth Tuve una pregunta de seguimiento. ¿Realmente tiene mucho sentido utilizar bibliotecas de JavaScript de Dart, cuando Dart está ahí para finalmente reemplazar un poco el Javascript? ¿Y Dart tiene algo incorporado para la visualización? –

+2

@AmitTomar la comunidad no puede exportar todas las bibliotecas JS de forma inmediata, por lo que tiene sentido usar la gran cantidad de bibliotecas JS disponibles. En cuanto a la creación de gráficos (visualización), solo conozco la interoperabilidad con las bibliotecas basadas en JS. –

3

Ver este hilo en el foro de discusión: Calling old javascript code.

+1

hacen referencia a la palabra clave nativa, pero no puedo encontrarla en la Referencia de la biblioteca o en la Especificación del idioma. – TMB

14

No podrá llamar a javascript directamente desde el código del dardo. La directiva nativa está reservada para las bibliotecas principales de dartc (dart: core, dart: dom, dart: html, dart: json, etc.), que a su vez compila en javascript.

+0

¿Tiene una referencia para esto? – TMB

+6

Trabajo en el equipo de dartc e internamente se habla de restringir la directiva nativa y la palabra clave a dardo: solo bibliotecas. Desde luego, puede ver las funciones principales (por ejemplo, isolate.dart & isolate.js) y ver que agregar la palabra clave "native" a la firma de una función (nota: ningún cuerpo en la versión Dart) le permitirá llamar a una función javascript destrozada; pero no prometemos que no te romperemos en el futuro. – jtmcdole

+6

Entiendo y respeto el ideal de darle a la Web un lenguaje limpio y pensado, pero le ruego que considere una capa de interoperabilidad. Microsoft proporcionó uno de Com a .Net para ayudar a garantizar que los proyectos se puedan migrar de forma incremental. Esto no ha impedido el éxito de .Net en absoluto; Creo que ayudó a su adopción, aunque mejoraron con el tiempo. Si la ruptura es algo que es motivo de gran preocupación, considere un programa de invitación para bibliotecas importantes como jQuery, MooTools y script.aculo.us. Gracias. – TMB

2

También hay una biblioteca dart:js. Y aquí está an article explicando cómo usar esta biblioteca para interoperar con JavaScript.

+0

Tenga en cuenta que el enlace es inexacto. Dart/JS que es parte de las principales bibliotecas de dardos es mucho más fácil y más limpio de usar para interactuar con javascript. No veo nada oficial sobre el tema, pero es parte del SDK: https://api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html – BeatingToADifferentRobot

6

ahora hay una nueva forma más simple https://pub.dartlang.org/packages/js (actualmente la versión 0.6.0-beta.6)

hacer que las clases y funciones JS disposición de Dardo como:

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

de más ver el archivo Léame del paquete

Cuestiones relacionadas