Будет ли Dart поддерживать использование существующих библиотек JavaScript?


108

Я понимаю, что Dart компилируется в JavaScript, и я прочитал спецификацию языка Dart по библиотекам, хотя я не нашел там ответа. Кроме того, поиск в их форме обсуждения по слову «существующие» дает 3 результата, которые не связаны между собой.

Кто-нибудь знает, будет ли Dart поддерживать использование существующих библиотек JavaScript, таких как jQuery или Raphael?


1
хотя сейчас задаю вопрос .
TMB

Ответы:


96

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


Спасибо за разъяснения, Сет!
jtmcdole

@Seth У меня есть дополнительный вопрос. Имеет ли смысл использовать библиотеки Javascript от Dart, когда Dart наконец-то заменит Javascript? А есть ли в Dart что-то встроенное для визуализации?
Амит Томар

2
@AmitTomar сообщество не может сразу перенести все библиотеки JS, поэтому имеет смысл использовать огромное количество библиотек JS. Что касается построения диаграмм (визуализации), я знаю только о взаимодействии с библиотеками на основе JS.
Сет Лэдд

@SethLadd Спасибо, Сет, это было полезно.
Амит Томар

Спасибо, Сет, я также демонстрирую, как его использовать в этой статье .
graphicbeacon

15

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


у вас есть ссылка на это?
TMB

6
Я работаю в команде dartc, и внутри компании идут разговоры об ограничении директивы native и ключевого слова только dart: libraries. Вы, конечно, можете взглянуть на любые основные функции (например, isolate.dart и isolate.js) и увидеть, что добавление ключевого слова «native» к сигнатуре функции (примечание: в версии Dart нет тела) позволит вам вызвать искаженную функцию javascript; но мы не обещаем, что не сломаем вас в будущем.
jtmcdole

6
Я понимаю и уважаю идеал создания в Интернете чистого и продуманного языка, но я прошу вас подумать об уровне взаимодействия. Microsoft предоставила его с Com на .Net, чтобы обеспечить постепенный перенос проектов. Это нисколько не помешало успеху .Net; Я считаю, что это помогло его принятию, хотя со временем они улучшили его. Если нарушение является чем-то, что вызывает серьезную озабоченность, подумайте о программе-приглашении для основных библиотек, таких как jQuery, MooTools и script.aculo.us. Спасибо.
TMB

2
Я приглашаю вас сделать запрос функции через наш трекер проблем @ ссылка . Я не верю, что это решение уже высечено на камне.
jtmcdole

1
Просто укажу, что это снова поднялось
jtmcdole

8

Теперь есть новый более простой способ https://pub.dartlang.org/packages/js (в настоящее время это версия 0.6.0-beta.6)

Сделайте классы и функции JS доступными для Dart, например:

@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, который является частью основных библиотек dart, намного проще и понятнее использовать для взаимодействия с 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.