尝试调用需要类型化数组的 javascript 方法。
var arrayData = js.array(new Uint8Array.fromList(data.charCodes));
使用 js.array 并没有像我期望的那样代理它,我如何将类型化数组作为类型化数组传递给 dart 中的 javascript 方法?
您可以直接从 Dart 实例化ArrayBuffer
和Uint8Array
javascript 对象。
如果您只需要一个Uint8Array
javascript 对象:
js.scoped(() {
final charCodes = "test".charCodes;
final bufView = new js.Proxy(js.context.Uint8Array, js.array(charCodes));
// do something with bufView
});
如果你需要一个ArrayBuffer
javascript 对象:
js.scoped(() {
final charCodes = "test".charCodes;
final buf = new js.Proxy(js.context.ArrayBuffer, charCodes.length);
final bufView = new js.Proxy(js.context.Uint8Array, buf)
..set(js.array(charCodes));
// do something with buf
});
基本上,每次需要使用new
javascript 运算符时,都必须使用new js.Proxy(construtor,...)
.
警告:在包含js-interop 的 pull-request #34 的新版本发布之前,您必须使用以下依赖项来运行上述代码片段。
dependencies:
js:
git: git://github.com/dart-lang/js-interop.git
找到的解决方案是创建一个 utils.js 并包含未加载到 js.context 中的对象的构造函数。
实用程序.js:
var xArrayBuffer=function(length) {
return new ArrayBuffer(length);
};
var xUint8Array=function(buf) {
return new Uint8Array(buf);
};
在index.html中包含 utils.js
<body>
<script src="utils.js"></script>
<script src="dart.js"></script>
<script src="example.dart.js"></script>
</body>
然后从 js.scoped 闭包调用。例子.dart
js.scoped(() {
var jscore = js.context.jscore;
var buf = js.context.xArrayBuffer(data.charCodes.length);
var bufView = js.context.xUint8Array(buf);
for (var i = 0; i < data.charCodes.length; i++) {
bufView[i] = data.charCodeAt(i);
}
jscore.writeArrayBuffer(buf);
});