Spec-Zone.ru › Dart 1

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

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

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

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

JsObject — это основной тип и представляет собой прокси JavaScript-объекта. JsObject предоставляет доступ к свойствам и методам базовых JavaScript-объектов. JsObject могут быть получены вызовами 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 = new 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, у которой есть метод apply для вызова.

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

  • "Базовые" типы: null, bool, num, String, DateTime
  • Blob
  • Event
  • HtmlCollection
  • ImageData
  • KeyRange
  • Node
  • NodeList
  • TypedData, включая его подклассы, такие как Int32List, но не ByteBuffer
  • Window

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

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

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

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

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

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

Свойства

CHECK_JS_INVOCATIONS → bool
@Deprecated("Только для внутреннего использования"), final
context → JsObject
только для чтения
escapePrivateClassPrefix → String
final
jsInterfaceTypes → Iterable<ClassMirror>
только для чтения

Функции

addMemberHelper(MethodMirror declaration, String path, StringBuffer sb, { bool isStatic: false, String memberName }) → void
@Deprecated("Только для внутреннего использования")
allowInterop(Function f) → Function

Возвращает обертку вокруг функции f, которую можно вызвать из JavaScript с помощью пакета:js Dart-JavaScript interop.

allowInteropCaptureThis(Function f) → JSFunction

Возвращает Function, которая при вызове из JavaScript сохраняет свою привязку 'this' и вызывает f со значением this, переданным в качестве первого аргумента. При вызове из Dart, null будет передано в качестве первого аргумента.

argsSafeForTypedInterop(Iterable args) → void
@Deprecated("Только для внутреннего использования")

Проверяет, что если какие-либо элементы из args являются Function, то они безопасны для передачи в JavaScript. Чтобы сделать функцию безопасной, вызовите allowInterop или allowInteropCaptureThis.

finalizeJsInterfaces() → void
@Deprecated("Только для внутреннего использования")

Может быть вызван для обеспечения предсказуемой точки, где больше не могут быть добавлены JS-интерфейсы. Создание экземпляра JsObject также автоматически вызовет завершение всех JsObject.

hasDomName(DeclarationMirror mirror) → bool
registerJsInterfaces([List<Type> classes ]) → void
@Deprecated("Только для внутреннего использования")

Временный метод, который, мы надеемся, будет удален в какой-то момент. Этот метод, как правило, должен вызываться только машиногенерируемым кодом.

safeForTypedInterop(arg) → dynamic
@Deprecated("Только для внутреннего использования")

Проверяет, что если arg является Function, то он безопасен для передачи в JavaScript. Чтобы сделать функцию безопасной, вызовите allowInterop или allowInteropCaptureThis.

setupJsTypeCache() → void

Классы

JSArray
JsArray

Список, проксирующий JavaScript-массив.

JSFunction
JsFunction

Проксирует объект JavaScript-функции.

JsNative
JSObject

Базовый класс для всех JS-объектов, используемых через dart:html и typed JS interop.

JsObject

Проксирует JavaScript-объект в Dart.

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-js/dart-js-library.html

Spec-Zone.ru

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