3

型付き配列を必要とする JavaScript メソッドを呼び出そうとしています。

var arrayData = js.array(new Uint8Array.fromList(data.charCodes));

js.array を使用しても、期待どおりにプロキシされません。型付き配列を型付き配列として dart の JavaScript メソッドに渡すにはどうすればよいですか?

4

2 に答える 2

3

Dartから直接オブジェクトをインスタンス化してjavascriptすることができますArrayBufferUint8Array

Uint8Arrayjavascriptオブジェクトのみが必要な場合:

js.scoped(() {
  final charCodes = "test".charCodes;
  final bufView = new js.Proxy(js.context.Uint8Array, js.array(charCodes));

  // do something with bufView
});

ArrayBufferjavascriptオブジェクトが必要な場合:

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
于 2012-12-18T12:59:09.767 に答える
2

見つかった解決策は、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);
  });
于 2012-12-17T05:21:19.653 に答える