Как Dart2JS преобразовывает функцию Dart в функцию JS? - PullRequest
0 голосов
/ 28 октября 2018

При передаче функций Dart в код Javascript текущее соглашение заключается в использовании allowInterop() из package:js (предположительно).Это работает довольно хорошо, но создает замыкание, которое не разрешено кодом Javascript, который ожидает функцию конструктора.

Я провел некоторое копание, но пришел в тупик здесь :

external DART_CLOSURE_TO_JS(Function function);

Куда это денется?Это с открытым исходным кодом?

Возможно ли преобразовать функцию Dart в незамкнутую функцию JS в пакете: js или dart: js?Если нет, то почему?

1 Ответ

0 голосов
/ 30 октября 2018

Функция Dart не будет работать в качестве конструктора JS, потому что у нее не будет настроен надлежащий прототип.Также с пользовательскими элементами есть еще одна трудность: он должен правильно делегировать конструктор элемента DOM.

Обычный способ сделать это - с классом ES6.Я сделал пример использования JS для определения класса пользовательских элементов.Я думаю, что вы, возможно, видели, но связывая это здесь на всякий случай: Dart custom element interop demo .Файл web / interop.js определяет класс пользовательских элементов.

Я думаю, что конструктор ES5 тоже будет работать, если он будет использовать Reflect.construct () .На прошлой неделе я потратил некоторое время на то, чтобы выяснить, поможет ли это модифицировать dart: html для работы с пользовательскими элементами, но я не думаю, что этого достаточно.Дарту потребуются некоторые лучшие возможности взаимодействия JS.

Тем временем я предлагаю определить пользовательские классы элементов в JS и использовать взаимодействие для общения с Дартом (и наоборот).

...