Библиотека 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 BlobEventHtmlCollectionImageDataKeyRangeNodeNodeList-
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