[英]How can I try out the latest JS interop? https://github.com/dart-lang/js-interop
我希望尝试“下一代” Dart JS互操作,其目标是能够从JS导出Dart库以供使用。 不过,这似乎对我不起作用。 我在以下位置阅读自述文件:
https://github.com/dart-lang/js-interop/blob/master/README.md
我创建了一个新项目,将依赖项设置为此github存储库,就像自述文件一样添加了一个A类,并尝试使用控制台从javascript实例化该A类。
在控制台中使用默认或命名构造函数时,我得到:
var a = new dart.lib.A.withName('word');
TypeError: undefined is not a function
var a = new dart.lib.A();
TypeError: undefined is not a function
这个重写功能了吗? 难道我做错了什么? 我应该使用js-interop的另一个分支吗?
这是我遵循自述文件的简单项目:
## pubspec.yaml
name: lib
description: A sample Dart lib published to JS
dependencies:
browser:
js:
git: git://github.com/dart-lang/js-interop.git
transformers:
- js
- js/initializer
## lib/a.dart
library lib;
import 'package:js/js.dart';
@Export()
class A {
String name;
A();
A.withName(this.name);
}
## web/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
</head>
<body>
<p id="text"></p>
<script type="application/dart" src="index.dart"></script>
<!-- for this next line to work, your pubspec.yaml file must have a dependency on 'browser' -->
<script src="packages/js/interop.js"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
## web/index.dart
import 'package:lib/a.dart';
import 'package:js/js.dart';
main() {
initializeJavaScript();
var a = new A();
}
## Generated index.dart_initialize.js
window.dart = window.dart || {};
window.dart.Object = function DartObject() {
throw "not allowed";
};
window.dart.Object._wrapDartObject = function(dartObject) {
var o = Object.create(window.dart.Object.prototype);
o.__dart_object__ = dartObject;
return o;
};
// library lib
(function (ns) {
var lib = ns;
["lib"].forEach(function (s) {
lib = lib[s] = lib[s] || {};
});
// class A
(function(parent) {
var constructor = parent.A = function _A() {
this.__dart_object__ = constructor._new();
};
constructor.prototype = Object.create(dart.Object.prototype);
constructor.prototype.constructor = constructor;
constructor._wrapDartObject = function(dartObject) {
var o = Object.create(constructor.prototype);
o.__dart_object__ = dartObject;
return o;
};
constructor.withName = function _withName(name) {
this.__dart_object__ = constructor._new_withName(name);
}
constructor.withName.prototype = constructor.prototype;
})(lib);
})(window.dart);
我只是尝试了您的代码,实际上我在指令中遗漏了一些东西。 您需要调用main()
方法中的initializeJavaScript()
来设置导出。 另外, interop.js
的脚本标签必须在Dart脚本之前。
完成这些更改后,我便可以运行您的代码并在JS控制台中执行此操作:
> var a = new dart.lib.A.withName('word');
< undefined
> a
< _withName {__dart_object__: DartObject, constructor: function}
> a.name
< "word"
> a instanceof dart.lib.A;
< true
这项工作正在进行中。 您必须等待使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.