D3.js dartlang互操作js和d3集成在dart中不起作用
我正在尝试使用AngularDart获得一个简单的D3.js dartlang互操作js和d3集成在dart中不起作用,d3.js,interop,dart,angular-dart,D3.js,Interop,Dart,Angular Dart,我正在尝试使用AngularDart获得一个简单的d3.js代码片段。我有一个简单的组件: @NgComponent(...) class LineChart { Element element; List<num> _items; var d3; @NgOneWayOneTime('data') set results ( List<num> results ) { _items = results; _drawLineChart(
d3.js
代码片段。我有一个简单的组件:
@NgComponent(...)
class LineChart {
Element element;
List<num> _items;
var d3;
@NgOneWayOneTime('data')
set results ( List<num> results ) {
_items = results;
_drawLineChart(_items);
}
LineChart(this.element) {
d3 = context['d3'];
var temp = d3.callMethod('selectAll', [new JsObject.jsify([element])]);
var temp1 = temp.callMethod('append', ['div']);
temp1.callMethod('html', ['Hello Me']);
}
}
:
递归地将类似JSON的Dart对象集合转换为JavaScript对象集合,并向其返回JsObject
代理
对象
必须是映射
或可编辑
,其内容也会转换。映射和Iterables被复制到一个新的JavaScript对象。原语和其他可传递值直接转换为它们的JavaScript类型,所有其他对象都被代理
当你打电话时:
var temp = d3.callMethod('selectAll', [new JsObject.jsify([element])]);
您不需要.jsify
元素,因为根据:
代理和自动转换
在JsObject上设置属性或向Javascript方法或函数传递参数时,Dart对象会自动转换或代理为Javascript对象。访问JavaScript属性或从JavaScript调用Dart闭包时,JavaScript对象也会转换为Dart
函数和闭包以可调用的方式进行代理。分配给JavaScript属性的Dart闭包由JavaScript中的函数代理。从Dart访问的JavaScript函数由JsFunction代理,JsFunction有一个apply方法来调用它
以下类型直接传输而非代理:
- “基本”类型:null、bool、num、String、DateTime
- 斑点
- 事件
- HtmlCollection
- 图像数据
- 键区
- 节点
- 节点主义者
- TypedData,包括其子类,如Int32List,但不包括ByteBuffer
- 窗口
元素
继承自节点
,并自动转换。因此,您只需拨打:
var temp = d3.callMethod('selectAll', [element]);
此外,您不需要创建临时变量,因为dart有快捷方式!您可以这样做:
LineChart(this.element) {
d3 = context['d3'];
d3.callMethod('selectAll', [element])
.callMethod('append', ['div'])
.callMethod('html', ['Hello Me']);
}
你能在一个小例子中重现这个吗?如果是这样,那么它可能是dart:js中的一个bug,我可以看一看。@JustinFagnani我可以试着这样做。几天前,当我调试这个程序时,我认为它实际上是chrome&chrome bug。我需要写一个小片段来演示。
LineChart(this.element) {
d3 = context['d3'];
d3.callMethod('selectAll', [element])
.callMethod('append', ['div'])
.callMethod('html', ['Hello Me']);
}