¿Dart admitirá el uso de bibliotecas JavaScript existentes?

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/

Seth Ladd
fuente
¡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.

jtmcdole
fuente
¿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

Günter Zöchbauer
fuente
4

Vea este hilo del foro de discusión: Llamar al código javascript antiguo .

Lukas Renggli
fuente
1
hacen referencia a la palabra clave nativa, pero no puedo encontrarla en la Referencia de la biblioteca o en las Especificaciones del idioma.
TMB
4

También hay una dart:jsbiblioteca. Y aquí hay un artículo que explica cómo usar esta biblioteca para interoperar con JavaScript.

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