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?

TMB
fonte
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/

Seth Ladd
fonte
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.

jtmcdole
fonte
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

Günter Zöchbauer
fonte
4

Veja este tópico do fórum de discussão: Chamando o código javascript antigo .

Lukas Renggli
fonte
1
eles fazem referência à palavra-chave nativa, mas não consigo encontrar isso na referência da biblioteca ou nas especificações de linguagem.
TMB
4

Também existe uma dart:jsbiblioteca. E aqui está um artigo que explica como usar essa biblioteca para interoperar com JavaScript.

Shailen Tuli
fonte
1
Observe que o link não está correto. O Dart / JS, que faz parte das principais bibliotecas do DART, é muito mais fácil e limpo de usar para fazer interface com o javascript. Não estou vendo nada oficial sobre o assunto, mas faz parte do SDK: api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html
BeatingToADifferentRobot