Поиск…


Вступление

Совместимость Dart-JavaScript позволяет запускать код JavaScript из наших программ Dart.

Взаимодействие достигается за счет использования библиотеки js для создания Dart-заглушек. Эти заглушки описывают интерфейс, который мы хотели бы иметь с базовым кодом JavaScript. Во время выполнения вызова Dart-заглушка вызывается код JavaScript.

Вызов глобальной функции

Предположим, мы хотели бы вызвать функцию JavaScript JSON.stringify которая получает объект, кодирует его в строку JSON и возвращает ее.

Все, что нам нужно сделать, это написать подпись функции, пометить ее как внешнюю и аннотировать ее с @JS аннотации @JS :

 @JS("JSON.stringify")
external String stringify(obj);

Аннотация @JS будет использоваться здесь, чтобы отметить классы Дарта, которые мы хотели бы использовать в JavaScript.

Объединение классов JavaScript / пространств имен

Предположим, мы хотели бы google.maps API Google Maps JavaScript API google.maps :

@JS('google.maps')
library maps;

import "package:js/js.dart";

@JS()
class Map {
  external Map(Location location);
  external Location getLocation();
}

Теперь у нас есть класс карты Dart, который соответствует классу JavaScript google.maps.Map .

Запуск new Map(someLocation) в Dart вызовет new google.maps.Map(location) в JavaScript.

Обратите внимание, что вам не нужно называть свой класс Dart таким же, как класс JavaScript:

@JS("LatLng")
class Location {
  external Location(num lat, num lng);
}

Класс Dart Location соответствует классу google.maps.LatLng .

Использование несогласованных имен обескураживается, поскольку они могут создавать путаницу.

Передача объектных литералов

В JavaScript распространена практика передачи объектных литералов в функции:

// JavaScript
printOptions({responsive: true});
Unfortunately we cannot pass Dart Map objects to JavaScript in these cases.

Нам нужно создать объект Dart, который представляет объектный литерал и содержит все его поля:

// Dart
@JS()
@anonymous
class Options {
  external bool get responsive;

  external factory Options({bool responsive});
}

Обратите внимание, что класс Dart Options не соответствует какому-либо классу JavaScript. Таким образом, мы должны отметить это @anonymous аннотацией.

Теперь мы можем создать заглушку для исходной функции printOptions и вызвать ее с помощью нового объекта Options:

// Dart
@JS()
external printOptions(Options options);

printOptions(new Options(responsive: true));


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow