返回匿名JS函数,它从Dart返回javascript普通对象

时间:2017-12-10 20:22:39

标签: dart dart-js-interop

飞镖码

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。见截图

Screenshot

所以前两行是从Dart代码打印的,然后我使用Chrome Inspect Element窗口并右键单击main_closure' and selected "Store as global variable" which then printed temp1`然后我用它来显示有关生成代码的一些信息。

所以很明显Dart返回了一个对象而不是一个js函数,所以这就是提出这个问题的原因。

所以我希望temp1成为一个函数而不是temp1.call$0,这样我才能通过调用temp1()而不是temp1.call$0()来获取数据。

1 个答案:

答案 0 :(得分:2)

请参阅js package doc

  

将函数传递给JavaScript。

     

如果您要将Dart函数传递给JavaScript API,则必须使用allowInteropallowInteropCaptureThis将其包装。