1

いいえ、これは同じ名前の他の質問と同じではありません。

これを行うように見える一見同一のパッケージがありますが、API が異なります。

なぜ2つあるのですか?

どちらを使用する必要がありますか?

相互運用機能はより新しく見え、より優れた API を備えていますが、実際には機能しません。ドキュメントによると、この JavaScript を変換できるはずです。

var stage = new PIXI.Stage(0xFFFFFF);;
renderer = PIXI.autoDetectRenderer(800, 600);
document.body.appendChild(renderer.view);

の中へ:

var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
document.body.append(renderer.view);

しかし、コンパイルしようとすると次のエラーが発生します。

dart2js
Error occured:/Users/doug/megac/client/public/dart/index.dart:7:27:
Warning: No member named 'PIXI' in class 'Proxy'.
var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
^^^^^^^^^^^^^^^

それで... js:dart? それはあなたが使用することになっているものですか?

編集:ちなみに、これに出くわした人のために、 dart-js相互運用ブリッジの縮小方法に関する未解決のバグhttp://code.google.com/p/dart/issues/detail?id=15795&thanks=15795&ts=1388068177もあります操作は現在機能しません。最初の問題は 2013 年 5 月に報告され、それ以来何の対策も取られていません。

4

1 に答える 1

6

Js 相互運用はpackage:jsで開始されました。window.postMessageで構築されました。

その後、dart:jsが追加され、パフォーマンスが向上し、コンパイルされた js ファイルのサイズが縮小されました。基本的に目標は次のとおりです。

  • スコープの削除とライフサイクルの手動処理
  • noSuchMethod を回避して、コンパイル サイズを可能な限り小さく保つ
  • オブジェクトの名前を変更して API をより理解しやすくする

dart :jsの準備が整うと、package:jsが書き直され、dart:jsを内部で使用するようになりました。

package:jsはより単純な Api を提供しますが、js サイズが大きくなります ( package:jsdart:mirrorsnoSuchMethodを使用するため)。

これはpackage:jsdart: jsで行われた同じことです:

import 'package:js/js.dart' as js;

main() {
  var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
  var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
  document.body.append(renderer.view);
}

import 'dart:js' as js;

main() {
  var pixi = new js.JsObject(js.context['PIXI']['Stage'], [0xffffff]);
  var renderer = js.context['PIXI'].callMethod('autoDetectRenderer', [400, 400]);
  document.body.append(renderer['view']);
}
于 2013-12-15T13:07:01.213 に答える