2011-10-10 8 views
93

Capisco che Dart compili su JavaScript, e ho letto il Dart Language Spec su Librerie, anche se non ho visto una risposta lì. Anche una ricerca sul loro discussion form per la parola "esistente" mostra 3 risultati non correlati.Dart supporta l'uso di librerie JavaScript esistenti?

Qualcuno sa se Dart supporterà l'uso di librerie JavaScript esistenti come jQuery o Raphael?

+1

anche se sto postando la [domanda] (https://groups.google.com/a/dartlang.org/group/misc/browse_thread/thr ead/511a97cd362b4f08 #) ora. – TMB

risposta

84

La risposta è ora Sì! Dart ora invia una libreria di interoperabilità JS per utilizzare il codice JavaScript esistente con l'app Dart. Ulteriori informazioni qui: https://www.dartlang.org/articles/js-dart-interop/

+0

Grazie per il chiarimento, Seth! – jtmcdole

+0

@Seth Ho avuto una domanda di follow-up. Ha davvero senso usare le librerie Javascript di Dart, quando Dart è lì per finalmente rimpiazzare Javascript? E Dart ha qualcosa di integrato per la visualizzazione? –

+2

@AmitTomar la comunità non può eseguire il porting su tutte le librerie JS immediatamente, quindi ha senso usare la grande quantità di librerie JS là fuori. Per quanto riguarda la creazione di grafici (visualizzazione), sono a conoscenza solo dell'interopzione con le librerie basate su JS. –

3

Vedere questa discussione dal forum di discussione: Calling old javascript code.

+1

fanno riferimento alla parola chiave nativa, ma non riesco a trovarla nel Riferimento bibliografico o nella Specifica lingua. – TMB

14

Non sarà possibile chiamare javascript direttamente dal codice dardo. La direttiva nativa è riservata alle librerie di base di dartc (dart: core, dart: dom, dart: html, dart: json, ecc.), Che a sua volta compila in javascript.

+0

hai un riferimento per questo? – TMB

+6

Lavoro con il team di Dartc e internamente si parla di limitare la direttiva nativa e la parola chiave a dart: solo le librerie. Puoi certamente guardare a tutte le funzioni di base (ad es. Isolare.dart e isolare.js) e vedere che aggiungendo la parola chiave "nativa" a una firma di funzione (nota: nessun corpo nella versione di Dart) ti consente di chiamare una funzione javascript distrutta; ma non ti promettiamo che non ti spezzeremo in futuro. – jtmcdole

+6

Capisco e rispetto l'ideale di dare al web un linguaggio pulito e meditato, ma ti prego di considerare uno strato intermedio. Microsoft ha fornito uno da Com a .Net per garantire che i progetti possano essere migrati in modo incrementale. Ciò non ha affatto ostacolato il successo di .Net; Credo che abbia aiutato la sua adozione, sebbene l'abbiano migliorata nel tempo. Se la rottura è qualcosa che preoccupa seriamente, prendere in considerazione un programma invitational per le principali librerie come jQuery, MooTools e script.aculo.us. Grazie. – TMB

2

C'è anche una libreria dart:js. Ed ecco lo an article che spiega come utilizzare questa libreria per l'interoperabilità con JavaScript.

+0

Nota il collegamento è impreciso. Dart/JS che fa parte delle principali librerie di dart è molto più facile e più pulito da usare per interfacciare a javascript. Non vedo nulla di ufficiale sull'argomento, ma fa parte dell'SDK: https://api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html – BeatingToADifferentRobot

6

ora c'è un nuovo modo più semplice https://pub.dartlang.org/packages/js (attualmente alla versione 0.6.0-beta.6)

Fai classi e funzioni JS disposizione Dart come:

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

per più vedi il readme del pacchetto