Возврат анонимной функции JS, которая возвращает простой объект javascript из Dart
Дартс код
import 'dart:html' as html;
import 'dart:js' as js;
import 'package:js/js.dart';
void main() {
var data = new AddLocationData(locationName: "Location1", locationPath: "ThisFolder");
var func = () => data;
html.window.console.log(func);
html.window.console.log(func());
}
@JS("")
@anonymous
class AddLocationData {
external String get locationName;
external String get locationPath;
external factory AddLocationData({String locationName, String locationPath});
}
Вы бы предположили, что func
будет функция JS, но это не так. Его тип / имя main_closure
, Смотрите скриншот
Итак, первые две строки были напечатаны из кода Dart, затем я использовал окно Chrome Inspect Element и щелкнул правой кнопкой мыши на main_closure' and selected "Store as global variable" which then printed
temp1`, а затем я использовал его для отображения некоторой информации о сгенерированном коде.
Итак, ясно, что Дарт возвратил объект, а не функцию js, и поэтому он задает этот вопрос.
Я хочу temp1
быть функцией вместо temp1.call$0
так что я могу получить данные, позвонив temp1()
и не temp1.call$0()
,
1 ответ
Смотрите документацию js package:
Передача функций в JavaScript.
Если вы передаете функцию Dart в JavaScript API, вы должны обернуть ее, используя
allowInterop
или жеallowInteropCaptureThis
,