¿Dart admitirá el uso de bibliotecas JavaScript existentes?


108

Entiendo que Dart se compila en JavaScript y leí la especificación de lenguaje de Dart en bibliotecas, aunque no vi una respuesta allí. Además, una búsqueda en su formulario de discusión de la palabra 'existente' arroja 3 resultados que no están relacionados.

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


1
aunque estoy publicando la pregunta ahora.
TMB

Respuestas:


96

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


¡Gracias por la aclaración, Seth!
jtmcdole

@Seth Tenía una pregunta de seguimiento. ¿Realmente tiene mucho sentido que use bibliotecas de Javascript de Dart, cuando Dart finalmente está ahí para reemplazar un poco a Javascript? ¿Y Dart tiene algo incorporado para la visualización?
Amit Tomar

2
@AmitTomar, la comunidad no puede migrar todas las bibliotecas JS de inmediato, por lo que tiene sentido usar la gran cantidad de bibliotecas JS que existen. En cuanto a los gráficos (visualización), solo conozco la interoperabilidad con bibliotecas basadas en JS.
Seth Ladd

@SethLadd Gracias Seth, eso fue útil.
Amit Tomar

Gracias Seth, también demuestro cómo usarlo en este artículo .
graphicbeacon

15

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


¿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 dart: solo bibliotecas. Ciertamente puede mirar cualquier función central (por ejemplo, isolate.dart y isolate.js) y ver que agregar la palabra clave "nativa" a la firma de una función (nota: ningún cuerpo en la versión de Dart) le permitirá llamar a una función javascript destrozada; pero no prometemos que no lo romperemos en el futuro.
jtmcdole

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

2
Lo invito a realizar una solicitud de función a través de nuestro enlace de seguimiento de problemas @ . No creo que esta decisión haya sido grabada en piedra todavía.
jtmcdole

1
Solo señalo que esto se ha planteado nuevamente como un problema: code.google.com/p/dart/issues/detail?id=1108
jtmcdole

8

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

Haga que las clases y funciones de JS estén disponibles para Dart 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);
}

para obtener más información, consulte el archivo Léame del paquete



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.