dart - 在没有 Dart VM 的情况下将 Dart API 导出到 JavaScript

标签 dart dart-js-interop

我想在没有 Dart VM 的浏览器上将 Dart API 导出到 JavaScript。例如,给定一个类 A:

class A {
  String name;

  A();

  A.withName(this.name);
}

我想使用导出的 API 创建一个 JavaScript 对象:

var a = new A();

我的 previous question 的答案向我指出 js-interop。

但是,在处理 README example 时,我无法获得预期的结果。 .看来我的 Dart 库没有导出到 JavaScript。

pubspec.yaml:

name: interop
description: >
  A library useful for applications or for sharing on pub.dartlang.org.
version: 0.0.1
dev_dependencies:
  unittest: any
dependencies:
  js:
    git:
      url: git://github.com/dart-lang/js-interop.git
transformers:
  - js
  - js/initializer

example/main.dart

库主要:

import 'package:js/js.dart';

main() {
  initializeJavaScript();
}

lib/a.dart

library a;

import 'package:js/js.dart';

@Export()
class A {
  String name;

  A();

  A.withName(this.name);
}

index.html

<html>
  <head>
    <script src="packages/js/interop.js"></script>
  </head>
  <body>
    <script type="application/dart" src="build/example/main.dart"></script>
  </body>
</html>

(不清楚最后一个脚本标签的 src 属性应该指向哪里。我也尝试过使用/example/main.dart,这并没有改变我的结果。)

我希望能够在编译(工具 -> Pub 构建)和加载 index.html 后打开一个控制台,然后执行此操作:

var a = new dart.a.A();

但是,我得到的是:“无法读取未定义的属性‘A’”。换句话说,dart.a 是未定义的。

在 index.html 中包含原始 Dart 脚本表明 js-interop 适用于带有 Dart VM 的浏览器。我尝试在 Dartium 上运行 index.html,结果相同。

我错过了什么?

最佳答案

script 标签的 src 属性仍然必须指向一个包含 main() 方法的 Dart 脚本文件。当使用 pub build 将应用程序构建为 JavaScript 时,Dart 将编译为 JavaScript,并且可以在没有 Dart VM 的浏览器中运行。

关于dart - 在没有 Dart VM 的情况下将 Dart API 导出到 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27323539/

相关文章:

dart - 是否可以在Polymer.dart中呈现List <Element>?

dart - 如何在 Dart 中将 `ByteData` 实例写入文件?

dart - 如何在稳定的 1.1.1 Dart 中绑定(bind) JavaScript 回调并在 JavaScript (Dart2Js2Dart) 中绑定(bind) Dart 回调?

Dart Js-Interop 函数类型参数

dart - 返回匿名JS函数,该函数从Dart返回javascript纯对象

Flutter 为 DraggableScrollableSheet 设置自定义高度

kotlin - Dart "sound null-safety"与 Kotlin 空安全有何不同?

flutter - 如何在 flutter 中将文本与图像对齐?

javascript - 从 Dart 代码调用匿名 Javascript 函数