我們希望直接從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包裝庫?如果可能,我會有興趣重新使用它。 –
不,我們沒有。我剛剛修改了答案,以顯示我們所在的位置。從這一點來看,這種模式很快就會延續下去,但我們可能不會走上這條道路。 –