Чи підтримає Dart використання існуючих бібліотек JavaScript?


108

Я розумію компіляції Dart до JavaScript, і читаю специфікацію мови Dart про бібліотеки, хоча відповіді там не бачив. Також пошук у формі їх обговорення для слова "існуючий" виявляє 3 результати, які не пов'язані між собою.

Хтось знає, чи буде Dart підтримувати використання існуючих бібліотек JavaScript, таких як jQuery або Raphael?


1
хоча я зараз розміщую це питання .
TMB

Відповіді:


96

Тепер відповідь: Так! Тепер Dart постачає бібліотеку JS-interop для використання наявного коду JavaScript у вашій програмі Dart. Докладніше тут: https://www.dartlang.org/articles/js-dart-interop/


Дякую за роз’яснення, Сет!
jtmcdole

@Seth У мене виникло додаткове запитання. Чи дійсно має сенс використовувати бібліотеки Javascript від Dart, коли Dart є, щоб остаточно замінити Javascript? А чи є у Дартса щось вбудоване для візуалізації?
Аміт Томар

2
@AmitTomar спільнота не може перенести всі бібліотеки JS негайно, тому має сенс використовувати величезну кількість бібліотек JS там. Щодо графіків (візуалізації), я знаю лише взаємодію з бібліотеками на базі JS.
Сет Ладд

@SethLadd Спасибі, Сет, це було корисно.
Аміт Томар

Спасибі Сет, я також демонструю, як це використовувати в цій статті .
graphicsbeacon

15

Ви не зможете зателефонувати у javascript безпосередньо з коду дартса. Нативна директива зарезервована для основних бібліотек dartc (dart: core, dart: dom, dart: html, dart: json тощо), які самі компілюються у javascript.


у вас є посилання на це?
TMB

6
Я працюю над командою dartc. Внутрішні розмови про обмеження нативної директиви та ключового слова dart: лише бібліотеки. Ви, звичайно, можете переглядати будь-які основні функції (наприклад, isolate.dart & isolate.js) і бачити, що додавання "нативного" ключового слова до функції підпису (зауважте: жодне тіло у версії Dart) не дозволить вам зателефонувати з функцією javascript у керованому режимі; але ми не обіцяємо, що ми не будемо порушувати вас у майбутньому.
jtmcdole

6
Я розумію і поважаю ідеал надання Інтернету чистої та продуманої мови, але прошу вас розглянути інтероп-шар. Microsoft надала компанію від Com до .Net, щоб забезпечити поступове переміщення проектів. Це зовсім не заважало досягти успіху .Net; Я вважаю, що це сприяло його прийняттю, хоча вони з часом його покращували. Якщо зламування викликає серйозне занепокоєння, розгляньте запрошувальну програму для великих бібліотек, таких як jQuery, MooTools та script.aculo.us. Дякую.
TMB

2
Запрошую вас надіслати запит на функцію за допомогою нашого трекера виклику @ посилання . Я не вірю, що це рішення ще було закинуто каменем.
jtmcdole

1
Тільки зазначивши, що це було вирішено як проблему знову: code.google.com/p/dart/issues/detail?id=1108
jtmcdole

8

Зараз з'явився новий простіший спосіб https://pub.dartlang.org/packages/js (наразі версія 0.6.0-beta.6)

Зробити доступними для Dart класи та функції JS таким чином:

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

Докладніше див. readme пакета



4

Також є dart:jsбібліотека. Ось стаття, що пояснює, як використовувати цю бібліотеку для взаємодії з JavaScript.


1
Зверніть увагу, що посилання є неточним. Dart / JS, який є частиною основних бібліотек дартс, набагато простіше і чистіше використовувати для інтерфейсу з javascript. Я не бачу нічого офіційного в цій темі, але це частина SDK: api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html
BeatingToADifferentRobot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.