Spec-Zone.ru › Dart 2

библиотека dart:js

Низкоуровневая поддержка взаимодействия с JavaScript.

Обычно вместо этой библиотеки следует использовать package:js. Подробнее см. на странице взаимодействия с JS.

Эта библиотека предоставляет доступ к объектам JavaScript из Dart, позволяя коду Dart получать и задавать свойства, вызывать методы объектов JavaScript и вызывать функции JavaScript. Библиотека выполняет преобразование объектов Dart и JavaScript, когда это возможно, и предоставляет прокси, если преобразование невозможно.

Эта библиотека не позволяет использовать объекты Dart из JavaScript: их методы и свойства недоступны, хотя библиотека позволяет передавать функции Dart в JavaScript и вызывать их оттуда.

JsObject — это основной тип, представляющий прокси объекта JavaScript. JsObject предоставляет доступ к свойствам и методам базового объекта JavaScript. JsObjects можно получить при вызове JavaScript или создать из прокси конструкторов JavaScript.

Геттер верхнего уровня context предоставляет JsObject, представляющий глобальный объект JavaScript, обычно window.

В следующем примере с помощью вызова глобальной функции JavaScript alert() отображается диалоговое окно с предупреждением:

import 'dart:js';

main() => context.callMethod('alert', ['Hello from Dart!']);

В этом примере показано, как создать JsObject из конструктора JavaScript и получить доступ к его свойствам:

import 'dart:js';

main() {
  var object = JsObject(context['Object']);
  object['greeting'] = 'Hello';
  object['greet'] = (name) => "${object['greeting']} $name";
  var message = object.callMethod('greet', ['JavaScript']);
  context['console'].callMethod('log', [message]);
}

Прокси и автоматическое преобразование

При задании свойств JsObject или передаче аргументов методу либо функции JavaScript объекты Dart автоматически преобразуются в объекты JavaScript или оборачиваются в прокси. При обращении к свойствам JavaScript или вызове замыкания Dart из JavaScript объекты JavaScript также преобразуются в объекты Dart.

Функции и замыкания оборачиваются в прокси таким образом, чтобы их можно было вызывать. Замыкание Dart, присвоенное свойству JavaScript, оборачивается в функцию JavaScript. Функция JavaScript, доступная из Dart, оборачивается в JsFunction, у которого есть метод JsFunction.apply для её вызова.

Следующие типы передаются напрямую и не оборачиваются в прокси:

  • Базовые типы: null, bool, num, String, DateTime
  • TypedData, включая подклассы, такие как Int32List, но не ByteBuffer
  • При компиляции для веб-платформы также: Blob, Event, ImageData, KeyRange, Node и Window.

Преобразование коллекций с помощью JsObject.jsify()

Чтобы создать коллекцию JavaScript из коллекции Dart, используйте конструктор JsObject.jsify, который преобразует Map и Iterable из Dart в объекты и массивы JavaScript.

Следующее выражение создаёт новый объект JavaScript с заданными свойствами a и b:

var jsMap = JsObject.jsify({'a': 1, 'b': 2});

Это выражение создаёт массив JavaScript:

var jsArray = JsObject.jsify([1, 2, 3]);

Классы

JsArray<E>
List, представляющий прокси массива JavaScript.
JsFunction
Прокси объекта Function в JavaScript.
JsObject
Прокси объекта JavaScript.

Свойства

context → JsObject
только для чтения
Глобальный объект JavaScript, обычно window.

Функции

allowInterop<F extends Function>(F f) → F
Возвращает обёртку для функции f, которую можно вызвать из JavaScript с помощью взаимодействия с JavaScript через package:js.
allowInteropCaptureThis(Function f) → Function
Возвращает обёртку для функции f, которую можно вызвать из JavaScript с помощью взаимодействия с JavaScript через package:js, передав JavaScript this первым аргументом.

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-js/dart-js-library.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API