Cytoscape:内部添加的元素'渲染'事件回调未在图表

时间:2018-06-11 09:28:23

标签: javascript visualization graph-theory cytoscape.js

我在渲染回调上使用了一个监听器,因为最初我想为边缘的每个中点添加一个节点。但是由于在完全渲染图形之前,中点位置是{x:undefined,y:undefined},所以这不起作用。

所以我使用cy.one('render', callback)并在渲染时直接调用回调,但如果在此回调中添加了元素,则只有在点击地图时才会将这些元素渲染到图表中,即使forceRender()在回调中调用。

此外,在记录cy.renderer()然后从控制台调用renderer.redraw()时,将重新呈现画布并显示元素。那么,为什么forceRender()不起作用?

我创建了一个JS Fiddle来重现错误。

1 个答案:

答案 0 :(得分:0)

我已经使用超时函数进行了测试,发现显然 func viewDidLoad(){ downloadDataFromServer { (success, goodNamesArray) in if success{ print("goodNamesArray: \(goodNamesArray)") print("successfully updated tableview data") self.tableView.reloadData() } } } func downloadDataFromServer(completionHandler: @escaping(Bool,[String])->()){ guard let url = URL(string: "http://app.avatejaratsaba1.com/api/Values/GetPriceList?paymentType=1&goodType=102") else { return } let request = URLRequest(url: url) let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { print("request failed \(String(describing: error))") return } do { if let json = try JSONSerialization.jsonObject(with: data) as? [[String:Any]] { var goodNameArray = [String]() for i in 0..<json.count{ guard let goodName = json[i]["goodName"] as? String else{return} self.goodNameArray.append(goodName) } print("GoodNames: \(self.goodNameArray)") Global.GlobalVariable.GoodName = goodNameArray } } catch let parseError { print("parsing error: \(parseError)") let responseString = String(data: data, encoding: .utf8) print("raw response: \(String(describing: responseString))") } } task.resume() } 在'render'事件回调中没有工作,可能不会导致任何循环。

此问题的解决方案是在调用forceRender()之前设置超时:

forceRender()