D3.js Dart+js_interop+d3=(帮助我解释x=NAN,y=NAN)
我正在尝试使用D3编写一些dart代码,但是当我调用D3.layout.force.start时,我遇到了非常奇怪的问题。在下面的代码中,我注释掉了force.size以下的所有内容。当我运行这段代码并在浏览器中查看控制台输出时,我会得到单个js.context.console.log的结果,它会打印出我的对象,就像分配word_map时所写的那样。问题是,只要我取消注释force.start,只需一行,顺便说一句,对象word_映射就会开始更改,console.log就会打印出一个x和y值为NAN的对象 为什么force.start会将我的对象的x和y值更改为NAN?当console.log在调用force.start之前很久出现时,该更改如何显示在我的console.log语句中。这就像是先调用force.start,然后再调用console.log一样D3.js Dart+js_interop+d3=(帮助我解释x=NAN,y=NAN),d3.js,dart,dart-js-interop,D3.js,Dart,Dart Js Interop,我正在尝试使用D3编写一些dart代码,但是当我调用D3.layout.force.start时,我遇到了非常奇怪的问题。在下面的代码中,我注释掉了force.size以下的所有内容。当我运行这段代码并在浏览器中查看控制台输出时,我会得到单个js.context.console.log的结果,它会打印出我的对象,就像分配word_map时所写的那样。问题是,只要我取消注释force.start,只需一行,顺便说一句,对象word_映射就会开始更改,console.log就会打印出一个x和y值为N
import 'dart:html';
import 'package:js/js.dart' as js;
import 'dart:async';
import 'dart:js';
List<Map<String, String >> word_map;
void main() {
draw_visualization();
}
void draw_visualization(){
word_map =new List<Map<String,String>>();
word_map= [{'word':'hello','x':30.0,'y':20.0, 'fixed':false}];
JsObject word_list_js = new JsObject.jsify(word_map);
js.context.console.log(word_list_js);
print ("Made it here first");
var force = d3.layout.force()
.nodes(word_list_js)
.links(js.array([]))
.size([600,400]);
/* .start();
var chart = d3.select("body")
.append("svg")
.attr('width', 600)
.attr('height', 400);
var node = chart.selectAll('.node')
.data(word_list_js).enter().append('circle')
.attr('class','node')
.attr('r', 5)
.attr('cx', new js.FunctionProxy((d,i,e){return d.x;}))
.attr('cy',new js.FunctionProxy((d,i,e){return d.y;}))
.style('fill', 'blue')
force.on('tick', new js.FunctionProxy((e){
node.attr("cx", new js.FunctionProxy((d,i,e){
if (d.x > 0 && d.x<4000){print(d.x);}
return d.x;
}))
.attr("cy", new js.FunctionProxy((d,i,e){
return d.y;
})
);
}));
*/
}
我必须承认,我对整个代理系统的工作原理有点困惑,Dart的异步也给我带来了一些麻烦。我只是不知道force.start函数会如何影响前面的console.log语句
总的来说,我只是希望我的物体不要被原力布局搞得乱七八糟。NAN代表x,为什么要这样做,使我的圆不能正确绘制
编辑:这似乎与重力有关。在添加之前的.gravity0之后。start不会将x和y计算为nan。我这样做是因为我预感到两种部队布局中的一种是造成问题的原因。我仍然不明白为什么gravity0会解决这个问题。你不应该混合使用package:js和dart:js
删除导入“dart:js”;。
用js.mapword\u映射替换新的JsObject.jsifiWord\u映射
我对Dart没有任何经验,但它可能覆盖了D3所依赖的一些东西。你有没有试过从网站上拿任何一个例子,看看它们是否正常运行?这基本上就是我正在做的。可悲的是,我不能直接把ex从网站上删除,因为我需要将其转换为dart代码并使用代理。