O Dart suportará o uso de bibliotecas JavaScript existentes?


108

Eu entendo que o Dart compila para JavaScript e li as especificações de linguagem Dart em bibliotecas, embora não tenha visto uma resposta lá. Além disso, uma pesquisa no formulário de discussão pela palavra 'existente' mostra 3 resultados não relacionados.

Alguém sabe se o Dart oferecerá suporte ao uso de bibliotecas JavaScript existentes, como jQuery ou Raphael?


1
embora eu esteja postando a pergunta agora.
TMB

Respostas:


96

A resposta agora é sim! O Dart agora fornece uma biblioteca de interoperabilidade JS para usar o código JavaScript existente com seu aplicativo Dart. Saiba mais aqui: https://www.dartlang.org/articles/js-dart-interop/


Obrigado pelo esclarecimento, Seth!
jtmcdole

@ Set, eu tenho uma pergunta de acompanhamento. Realmente faz muito sentido você usar bibliotecas Javascript do Dart, quando o Dart está lá para finalmente substituir o Javascript? E o Dart tem algo embutido para visualização?
Amit Tomar

2
@AmitTomar a comunidade não pode portar todas as bibliotecas JS imediatamente, então faz sentido usar a grande quantidade de bibliotecas JS que existem. Quanto a gráficos (visualização), estou ciente apenas da interoperabilidade com bibliotecas baseadas em JS.
Seth Ladd

@SethLadd Obrigado Seth, isso foi útil.
Amit Tomar

Obrigado Seth, também demonstro como usá-lo neste artigo .
graphicbeacon

15

Você não poderá chamar o javascript diretamente do código DART. A diretiva nativa é reservada para as bibliotecas centrais do dartc (dart: core, dart: dom, dart: html, dart: json, etc), que é compilado para javascript.


você tem uma referência para isso?
TMB

6
Eu trabalho na equipe do dartc e internamente há conversas sobre restringir a diretiva nativa e palavra-chave para dart: bibliotecas apenas. Você certamente pode olhar para qualquer função central (por exemplo, isolate.dart & isolate.js) e ver que anexar a palavra-chave "nativa" a uma assinatura de função (nota: nenhum corpo na versão Dart) permitirá que você chame uma função javascript mutilada; mas não fazemos nenhuma promessa de que não o quebraremos no futuro.
jtmcdole

6
Eu entendo e respeito o ideal de dar à Web uma linguagem limpa e bem pensada, mas peço que você considere uma camada de interoperabilidade. A Microsoft forneceu um de Com para .Net para ajudar a garantir que os projetos pudessem ser migrados de forma incremental. Isso não atrapalhou o sucesso do .Net; Acredito que ajudou a sua adoção, embora tenha melhorado com o tempo. Se quebrar é algo que causa séria preocupação, considere um programa de convite para as principais bibliotecas, como jQuery, MooTools e script.aculo.us. Obrigado.
TMB

2
Convido você a fazer uma solicitação de recurso por meio de nosso link de rastreador de problemas @ . Não acredito que essa decisão tenha sido gravada em pedra ainda.
jtmcdole

1
Apenas apontando que isso foi levantado como um problema novamente: code.google.com/p/dart/issues/detail?id=1108
jtmcdole

8

Agora existe uma nova maneira mais simples https://pub.dartlang.org/packages/js (atualmente versão 0.6.0-beta.6)

Disponibilize classes e funções JS 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 mais veja o readme do pacote



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.