型付き配列を必要とする JavaScript メソッドを呼び出そうとしています。
var arrayData = js.array(new Uint8Array.fromList(data.charCodes));
js.array を使用しても、期待どおりにプロキシされません。型付き配列を型付き配列として dart の JavaScript メソッドに渡すにはどうすればよいですか?
Dartから直接オブジェクトをインスタンス化してjavascriptすることができますArrayBuffer
。Uint8Array
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);
});