Spec-Zone.ru › Dart 2

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

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

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

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

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

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

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

Следующий пример демонстрирует диалоговое окно alert с помощью вызова 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, который преобразует Dart Mapы и Iterableы в JavaScript-объекты и массивы.

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

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

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

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

Классы

JsArray<E>
Список, который проксирует JavaScript-массив.
JsFunction
Прокси на JavaScript-объект Function.
JsObject
Прокси на JavaScript-объект.

Свойства

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

Функции

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

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

Spec-Zone.ru

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