javascript - 如何通过 Dart 互操作此 Javascript?

标签 javascript dart interop

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/

相关文章:

dart - 如何在 flutter 测试覆盖率中排除文件?

android - 使用flutter获取simcard信息

f# - 如何在 F# 交互中加载 native DLL?

c# - 我们如何用c sharp打开具有特定页码的word文件?

javascript - 检测径向像素

javascript - 如何使用 jquery 将正则表达式应用于客户端文件的内容?

dart - dart 中隐式强制转换运算符的语法是什么?

java - 为什么某些 Java 函数能够更改不可变的 Kotlin 对象?

javascript - 使用 fetch 时请求正文为空

javascript - 在 div 中加载图像时加载 gif 图像