2016-02-27 51 views
2
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庫的片斷,但示例interop沒有任何類似Graph.Layout.Ordered的東西。 (這是我正在使用的圖書館:http://www.graphdracula.net如何使用JavaScript進行交互操作?

你會如何交互?

我想出了這樣的事情。但它拋出了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); 

回答

2

我認爲有很多@anonymous註釋不屬於那裏。

因此,例如,頂級函數topological_sort可能應該被定義爲

@JS() 
external List topological_sort(Graph g); 

在另一方面,如果在JavaScript的側StyleObject是普通地圖(不是與構造/原型對象 - 諸如此類的東西),那麼它也許應該被定義爲

@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); 
} 
+0

是的,我已經解決了這兩個。他們絕對是最簡單的。 現在我無法使用圖形中的addNode工作。即使我創建了該功能。 –

+0

如果您在圖中將Graph標記爲'@ anonymous' - 我不認爲其中的方法是可訪問的。我已經更新了我的答案 –