g = new Graph();
g.edgeFactory.template.style.directed = true;
g.addNode("test");
layouter = new Graph.Layout.Ordered(g, topological_sort(g));
renderer = new Graph.Renderer.Raphael("graphCanvas", g, width, height);
我一直在尝试对我使用的 Javascript 库进行互操作,但示例互操作中没有任何类似于 Graph.Layout.Ordered 的内容。 (这是我正在使用的库:http://www.graphdracula.net)
你会如何互操作这样的东西?
我想出了这样的事情。但它抛出一个错误,找不到addNode。 Javascript中的Graph.prototype有addNode函数。
@anonymous
@JS('Graph.Layout')
class GraphLayoutOrdered {
external void layout();
external GraphLayoutOrdered(Graph g, List ts);
}
@anonymous
@JS('Graph.Renderer')
class RaphaelRenderer {
external void draw();
external RaphaelRenderer(String s, Graph g, int width, int height);
}
@anonymous
@JS("Graph")
class Graph {
external Graph();
external EdgeFactory get edgeFactory;
external void addNode(String s, [Object content]);
external void addEdge(var source, var target, var style);
}
@anonymous
@JS('Graph')
class EdgeFactory {
external AbstractEdge get template;
}
@anonymous
@JS('EdgeFactory')
class AbstractEdge {
external StyleObject get style;
}
@anonymous
@JS('AbstractEdge')
class StyleObject {
external bool get directed;
external set directed(bool b);
}
@anonymous
@JS()
external List topological_sort(Graph g);
最佳答案
我认为有很多 @anonymous
注释不属于那里。
因此,例如,顶级函数topological_sort
可能应该定义为
@JS()
external List topological_sort(Graph g);
另一方面,如果在 javascript 方面 StyleObject 是普通映射(不是具有构造函数/原型(prototype)的对象 - 诸如此类),那么它可能应该定义为
@anonymous
@JS()
class StyleObject {
external bool get directed;
external set directed(bool b);
}
更新:
图定义也应该没有@anonymous
。并且可能在 @JS
中没有参数。就像这样:
@JS
class Graph {
external Graph();
external EdgeFactory get edgeFactory;
external void addNode(String s, [Object content]);
external void addEdge(var source, var target, var style);
}
关于javascript - 如何通过 Dart 互操作此 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675769/