从 Dart 返回 returns javascript 普通对象的匿名 JS 函数
Returning anonymous JS function which returns javascript plain object from 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 函数,但它不是。它的 type/name 是 main_closure
。看截图
所以前两行是从 Dart 代码打印的,然后我使用 Chrome Inspect Element window 并右键单击 main_closure' and selected "Store as global variable" which then printed
temp1` 然后我用它来显示一些信息关于生成的代码。
很明显 Dart 返回了一个对象而不是 js 函数,所以这就是问这个问题的原因。
所以我希望 temp1
成为一个函数而不是 temp1.call[=17=]
这样我就可以通过调用 temp1()
而不是 temp1.call[=19=]()
.[=21= 来获取数据]
Passing functions to JavaScript.
If you are passing a Dart function to a JavaScript API, you must wrap it using allowInterop
or allowInteropCaptureThis
.
飞镖代码
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 函数,但它不是。它的 type/name 是 main_closure
。看截图
所以前两行是从 Dart 代码打印的,然后我使用 Chrome Inspect Element window 并右键单击 main_closure' and selected "Store as global variable" which then printed
temp1` 然后我用它来显示一些信息关于生成的代码。
很明显 Dart 返回了一个对象而不是 js 函数,所以这就是问这个问题的原因。
所以我希望 temp1
成为一个函数而不是 temp1.call[=17=]
这样我就可以通过调用 temp1()
而不是 temp1.call[=19=]()
.[=21= 来获取数据]
Passing functions to JavaScript.
If you are passing a Dart function to a JavaScript API, you must wrap it using
allowInterop
orallowInteropCaptureThis
.