我们希望直接从Dart调用D3(v4)行功能,因为我们试图将它与Angular 2一起使用。我们尝试了各种方法,如Dart D3 line使用Package JS
- Dart D3库(https://github.com/rwl/d3.dart)但它不暴露SVG线。
直接JS互操作
var line = context['d3']['svg'].callMethod('line').callMethod('x', [new JsFunction.withThis((jsThis) { return 10; })]).callMethod('y', [new JsFunction.withThis((jsThis) { return 20; })]); line.apply(['{x:10, y:50}']);
但这种爆炸,非常难看。
使用Js.dart
@JS('d3') library d3; import 'dart:html'; import "package:func/func.dart"; import "package:js/js.dart"; @JS('line') class Line { external Line(); external String (var data); external Line x(Function func); external Line y(Function func); }
这似乎是工作大多是正常的,除了D3需要调用与数据的原始功能,以生成路径。例如,你需要以下条件:
var line = d3.line().x(function (d) { return d.x;}).y(function (d) { return d.y;}); line([{x:10, y:20}]);
所以我们到了:
Line line = new Line();
line.x(allowInterop((blah) { return 10;}));
line.y(allowInterop((blah) { return 10;}));
line.apply([[10, 20]]); //What goes here?
我也试过这样的回答:Dart js interop with D3
var d3 = context['d3']; var line = d3.line().x((jsThis) { return 20;}).y((jsThis) { return 20;}); return line([[10, 20]]);
这样做的建议方法是什么?另外,您是否有使用Angular 2 + D3 + Dart的指南?我只看过类型脚本,在它们之间翻译并不是世界上最简单的东西。
虽然我已经设法解决这个特定的问题,如果有的一有更好的解决办法,请张贴,我会接受。 –
您是否发布了Dart包装库?如果可能,我会有兴趣重新使用它。 –
不,我们没有。我刚刚修改了答案,以显示我们所在的位置。从这一点来看,这种模式很快就会延续下去,但我们可能不会走上这条道路。 –