尝试调用需要类型化数组的javascript方法。
var arrayData = js.array(new Uint8Array.fromList(data.charCodes));
使用js.array并不像我期望的那样代理它,我怎样才能将类型数组作为类型数组传递给dart中的javascript方法?
答案 0 :(得分:3)
您可以直接从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,...)
。
警告:在新版本登陆包含the pull-request #34 of js-interop之前,您必须使用以下相关性来运行上面的代码段。
dependencies:
js:
git: git://github.com/dart-lang/js-interop.git
答案 1 :(得分:2)
找到的解决方案是创建一个utils.js并包含未在js.context中加载的对象的构造函数。
的 utils.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闭包调用。的 example.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);
});