Мы хотим, чтобы вызвать D3 (v4) линейные функции непосредственно (в том числе) от Dart, как мы пытаемся использовать его с угловым 2. Мы пробовали различные вещи, такие какDart D3 линия с использованием пакетом JS
- Dart D3 library (https://github.com/rwl/d3.dart), но не выставляет линию SVG.
Direct JS Interop
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? Мне было бы интересно повторно использовать его, если это возможно. –
Нет, мы этого не сделали. Я только что изменил ответ, чтобы показать, к чему мы пришли. Шаблон довольно быстро простирается с этого момента вперед, но мы, вероятно, не собираемся идти по этой дороге. –