JavaScript回调函数似乎工作,但不绘制数据 [英] JavaScript callback function seems to work, but does not draw the data

查看:127
本文介绍了JavaScript回调函数似乎工作,但不绘制数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经完成了许多有关回调的教程(例如这里 a>, SO this gem

到目前为止,最好的一个是这个gem 。特别是这部分帮助我理解。

I've already been through many tutorials on callbacks (e.g. here, on SO and this gem)
By far the best one was this gem. Especially this part helped me to understand.

function addOne(thenRunThisFunction) {
  waitAMinuteAsync(function waitedAMinute() {
    thenRunThisFunction()
  })
}

addOne(function thisGetsRunAfterAddOneFinishes() {})

所以我实现它在那里描述。现在一切似乎都在控制台输出上工作,但它不会按预期呈现我的 d3强制定向图

So I implemented it as described there. Now everything seems to work on console output, but it does not render my d3 force directed graph as expected.

[some fancy variables used by force graph]

function draw(json) {
    java.alert(json);
    [awsome force graph stuff]
};

var data = undefined;

function readInputStream(callback){
    data = java.getJSONObject();
    if(!data == ""){
        java.alert("success");
    } else {
        java.alert("failure");
    }
    callback();
}

function prepareDraw() {
    java.alert("prepare called");
    draw(data);
}

readInputStream(prepareDraw);

请注意, java 是一个标识符。我在JavaFX WebView中运行它,并且 java。之后的所有方法都是我在JavaScript中使用的实际java方法。请参阅:

Please note that java is an identifier. I'm running it all in a JavaFX WebView and all methods after java. are actual java methods I use in JavaScript. See this:

public class JStoFXBridge {
    private String json;

    public String getJSONObject(){
        return json;
    }
    public void setJSONObject(String string){
        this.json = string;
    }
    public void alert(String alert){
        System.out.println("Alert: " + alert);
    }
}

现在我的控制台打印:

Alert: success
Alert: prepare called
Alert: {"nodes":[{"name":"sepp","id":0,"group":2},{"name":"hans","id":1,"group":6}, [...]

这是我的JSON字符串的正确格式,它是(按我看到的)正确的顺序被执行。 data 获得填充且不为空。 调用回调方法。我的绘制函数有一个填充&am​​p;有效 JSON字符串。这里出了什么问题?

Which is the right format for my JSON String and which is (as far as I see it) in the right order to be executet. data gets filled and is not empty. the callback method gets called. My draw function has a filled & valid JSON String. What is going wrong here? I have no explination why this won't work.

推荐答案

有时它比你想象的容易...

Sometimes it's easier than you think...

java.alert("prepare called");
var json = JSON.parse(data);
draw(json);

问题: data 想要一个JSON对象。 在此观看 。新输出:

Problem: data was a String, d3 wants a JSON Object. Watch here. New output:

Alert: success
Alert: prepare called
Alert: [object Object]

现在渲染图表很好。 var data = {nodes:[{name:sepp,[...] 可以工作,因为JavaScript将其解释为JSON对象。

Now renders the graph just fine. var data = {"nodes":[{"name":"sepp", [...] works because JavaScript interpretes it as a JSON Object.

这篇关于JavaScript回调函数似乎工作,但不绘制数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆