不,这与同名的其他问题不同。
看似相同的软件包似乎是这样做的,但有不同的apis。
为什么有两个?
我们应该使用哪一个?
互操作一个看起来更新并且有更好的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月报道的,从那时起就没有采取任何行动,所以不要屏住呼吸。
答案 0 :(得分:6)
Js interop以package:js开头。它是使用window.postMessage构建的。
后来添加dart:js以提供更好的性能并减少已编译的js文件的大小。基本上目标是:
dart:js 准备就绪后, package:js 已被重写,以便在封面下使用 dart:js 。
包:js 提供了一个更简单的Api,其代价是增加了js的大小(因为包:js 使用 dart:mirrors 和 noSuchMethod )。
使用包完成同样的事情:js 和 dart: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']);
}